Ссылаясь на тип верхнего уровня, скрытый от типа локального модуля - PullRequest
2 голосов
/ 08 ноября 2019

Новый для F #. Наслаждаясь этим.

Я пытаюсь сослаться на тип, который я объявил на верхнем уровне модуля F # из вложенного модуля.

В этом коде я хочу o1 для ссылки на тип верхнего уровня Order:

module Order

type Id = Id of int64
module Id = let value (Id i) = i // allow us to unpack the int64

type Order = {Id : Id}

module DTO =

  type Order = {Id : int64} 

  let DomainToDTO (o1 : Order) : Order = { Order.Id = Id.value(o1.Id) }

Это работает:

module Order

type Id = Id of int64
module Id = let value (Id i) = i // allow us to unpack the 

type Order1 = {Id : Id}

module DTO =

  type Order2 = {Id : int64} 

  let DomainToDTO (o1 : Order1) : Order2 = { Order2.Id = Id.value(o1.Id) }

Можно ли сообщить компилятору, что функция DomainToDTO ожидает получения верхнего уровня-уровневый тип, без присвоения локальному типу другого имени?

Т.е. я хочу, чтобы код был ниже, чтобы ссылаться либо на "Заказ", либо на "DTO.Order"?

Спасибо за помощь

Роланд

1 Ответ

2 голосов
/ 08 ноября 2019

Одной из альтернатив является псевдоним типа перед его затенением в подмодуле:

module Order

type Id = Id of int64
module Id = let value (Id i) = i // allow us to unpack the int64

type Order = {Id : Id}

module DTO =
  type ParentOrder = Order
  type Order = {Id : int64} 

  let DomainToDTO (o1 : ParentOrder) : Order = { Order.Id = Id.value(o1.Id) }
...