部分类型签名

可能重复:
不完整的类型签名

考虑以下:

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")

但对我来说这似乎很丑陋。


你可以使用asTypeOf

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

迫使monad成为Maybe 。 并不是说这种收益大大超过了

main = do
    print (parseUrl "http://stackoverflow.com" :: Maybe (Request m))
链接地址: http://www.djcxy.com/p/7449.html

上一篇: Partial type signature

下一篇: How to define function signatures partially in Haskell?