Это ожидаемое поведение шаблона Haskell?

кто-нибудь может сказать, почему этот код не компилируется

data A = A {
  _b  :: B
}
makeLenses ''A

type B = String

С

Not in scope: type constructor or class B

а это:

type B = String

data A = A {
  _b  :: B
}
makeLenses ''A

без makeLenses все компилируется нормально.

Почему у меня не может быть объявления типа synonim после makeLenses?

1 ответов


в области доступны только определения перед вызовом шаблона haskell.

см. этот предыдущий вопрос по той же теме:Haskell: шаблон Haskell и область.