部分类型签名

时间:2012-07-31 05:57:35

标签: haskell ghc type-inference

  

可能重复:
  Incomplete type signature

请考虑以下事项:

import Network.HTTP.Conduit  

(parseUrl "http://stackoverflow.com") :: Maybe a

parseUrl返回Failure HttpException m => m (Request m')

它的文件说:

  

由于此函数使用Failure,因此返回monad可以是任何内容   这是Failure的一个实例,例如IOMaybe

但是,当我尝试强制parseUrl使用Maybe时,我收到以下错误:

main.hs:9:11:
    Couldn't match type `a' with `Request m'0'
      `a' is a rigid type variable bound by
          an expression type signature: Maybe a at main.hs:9:10
    Expected type: Maybe a
      Actual type: Maybe (Request m'0)

无论如何都要将类型强制为Maybe而不指定完整的确切类型?包括GHC扩展在内的答案都很好。

请注意,这有效:

f :: Maybe a -> Maybe a
f x = x

f (parseUrl "http://stackoverflow.com")

但这对我来说似乎很难看。

1 个答案:

答案 0 :(得分:1)

您可以使用asTypeOf

main = do
    print (parseUrl "http://stackoverflow.com" `asTypeOf` Nothing)

强制monad为Maybe。 <= p>并非如此

main = do
    print (parseUrl "http://stackoverflow.com" :: Maybe (Request m))