Возможно, вы получаете сообщение об ошибке, потому что module.Owe
не является правильным способом ссылки на тип из другого модуля. Здесь вам не нужно ключевое слово module
- вам просто нужно дать имя модуля и имя класса, как в <module-name>.<class-name>
. В вашем случае, несколько запутанно, имя модуля и имя класса Owe
, поэтому вы можете написать Owe.Owe
.
Еще одна вещь, которую нужно иметь в виду, это то, что в F # порядок файлов имеет значение. Это означает, что вы можете ссылаться на классы только из файлов, которые появились ранее в вашем проекте.
Наконец, я бы также добавил, что довольно часто объявляется несколько типов в одном файле (и в одном модуле) в F #, поэтому вам не нужно перемещать определения в отдельные файлы. Я бы также рекомендовал использовать синтаксис lightweitght для объявления классов с использованием неявных конструкторов:
type Owe(name:string, amount:float) =
member x.Name = name
member x.Amount = amount
type Roomate(name:string, owe:Owe) =
member x.Name = name
member x.Owe = owe
Хотя в этом случае вам могут вообще не понадобиться классы, и вы можете просто использовать записи:
type Owe = { Name:string; Amount:float }
type Roomate = { Name:string; Owe:Owe }