我期望下面的代码示例应该编译
testOptionalEq = None == None
testEitherEq = Left 1 == Left 1
testOptionalShow = show None
testEitherShow = show (Left 1)
但是每一行都会导致编译错误,或者
Ambiguous type variable `a1' arising from a use of `=='
prevents the constraint `(Eq a1)' from being solved.
Probable fix: use a type annotation to specify what `a1' should be.
或
Ambiguous type variable `a0' arising from a use of `show'
prevents the constraint `(Show a0)' from being solved.
Probable fix: use a type annotation to specify what `a0' should be.
尝试在ghci
中使用类似的Haskell代码。一种解决方法是为值赋予显式类型签名(例如None : Optional Int
),但如果没有该功能,那就太好了。
答案 0 :(得分:0)
您的代码仅在ghci
中无法在已编译的Haskell中工作,因为ghci
自动启用了ExtendedDefaultRules
extension。如果要在DAML中实现这种行为,则需要在文件顶部显式打开{-# LANGUAGE ExtendedDefaultRules #-}
,然后此代码才能起作用。
但是,像Haskell一样,我通常不建议您打开此扩展程序。如果您没有足够的可用类型,这种情况就很少见了,而将此扩展名限制为“交互式类”会使情况变得很混乱。