Моя проблема в последней строке:Существует ли пространство имен для текущего модуля?
module A where
data A = A { f :: Int }
defaultA = A { f = 0 }
и
module B where
import A as A
data B = B { f :: Int }
bToA :: B -> A
bToA x = defaultA { A.f = f x }
дает
B.hs:8:26:
Ambiguous occurrence `f'
It could refer to either `B.f', defined at B.hs:5:13
or `A.f', imported from A at B.hs
Поскольку я не может включать в себя B аттестованы в себе то, что существует альтернатива для того чтобы разрешить столкновение пространства имен? Я бы предпочел не переименовывать функцию clashing.
Редактировать: обновили эти примеры.
Как ссылаться на 'defaultA', если модуль не« импортирует A'? – kennytm
Хм, это работает, спасибо. В моем примере в реальной жизни имена модулей довольно длинные, поэтому они искали «импортное решение Foo as F». – LennyStackOverflow
2KennyTM: исправлено, спасибо – Yuras