部分类型签名
可能重复:
不完整的类型签名
考虑以下:
import Network.HTTP.Conduit
(parseUrl "http://stackoverflow.com") :: Maybe a
parseUrl
返回Failure HttpException m => m (Request m')
它的文档说:
由于此函数使用Failure
,返回的monad可以是任何Failure
的实例,例如IO
或Maybe
。
但是,当我尝试强制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
下一篇: How to define function signatures partially in Haskell?