Haskell 部分类型签名
可能重复:Haskell 部分类型签名,haskell,ghc,type-inference,Haskell,Ghc,Type Inference,可能重复: 考虑以下几点: import Network.HTTP.Conduit (parseUrl "http://stackoverflow.com") :: Maybe a 返回故障HttpException m=>m(请求m') 文件上说: 由于此函数使用的是故障,因此返回的monad可以是任何内容 这是故障的一个实例,例如IO或可能 但是,当我试图强制parseUrl使用Maybe时,我得到以下错误: main.hs:9:11: Couldn't match typ
考虑以下几点:
import Network.HTTP.Conduit
(parseUrl "http://stackoverflow.com") :: Maybe a
返回故障HttpException m=>m(请求m')
文件上说:
由于此函数使用的是故障
,因此返回的monad可以是任何内容
这是故障
的一个实例,例如IO
或可能
但是,当我试图强制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)
是否仍有强制类型为可能
,而不指定完整的确切类型?包括GHC扩展在内的答案很好
请注意,这是有效的:
f :: Maybe a -> Maybe a
f x = x
f (parseUrl "http://stackoverflow.com")
但是在我看来它很难看。你可以使用
asTypeOf
main = do
print (parseUrl "http://stackoverflow.com" `asTypeOf` Nothing)
强制单子为可能是。但这并不是说它比我们更重要
main = do
print (parseUrl "http://stackoverflow.com" :: Maybe (Request m))
您可以使用asTypeOf
main = do
print (parseUrl "http://stackoverflow.com" `asTypeOf` Nothing)
强制单子为可能是。但这并不是说它比我们更重要
main = do
print (parseUrl "http://stackoverflow.com" :: Maybe (Request m))
我问了一个更好的问题我问了一个更好的问题