1

重複の可能性:
不完全な型シグネチャ

次の点を考慮してください。

import Network.HTTP.Conduit  

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

parseUrl戻り値Failure HttpException m => m (Request m')

ドキュメントには次のように書かれています:

この関数は を使用するため、返されるモナドはやなどFailure、 のインスタンスであれば何でも構いません。FailureIOMaybe

ただし、強制的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")

しかし、それは私には醜いようです。

4

1 に答える 1

1

を使用できますasTypeOf

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

モナドを強制的に にしますMaybe。それが多くを上回るというわけではありません

main = do
    print (parseUrl "http://stackoverflow.com" :: Maybe (Request m))
于 2012-07-31T06:18:38.860 に答える