类型签名需要一个未由库导出的类型

时间:2014-07-10 18:05:46

标签: haskell ghc aeson

所以我使用了aeson库,并认为拥有以下功能非常有用:

v .:! f = liftM (fromMaybe mempty) (v .:? f)

当我问GHCi的类型时,我得到:

(.:!)
  :: (Monoid r, FromJSON r) =>
     Object
     -> T.Text -> aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser r

但是,Parser本身实际上并未由Data.AesonData.Aeson.Types导出。我被迫没有为我定义的函数设置类型签名吗?

或者,如果有人知道更好的方式来完成我想做的事情,我会对你的建议感兴趣。

1 个答案:

答案 0 :(得分:3)

目前,在Haskell中完全有可能编写具有推断类型的代码,由于未导出的符号,您无法自己编写。 2014年4月Haskell图书馆邮件列表上有一个discussion about this,但没有得出确切的结论,但一般意义上是保持当前的行为。

但是,一般规则是,如果需要语言扩展来编写将被推断的类型签名,那么即使您未明确包含签名,也需要启用该扩展