「タイプ `Maybe 'と` IO'を一致させることができませんでした。期待されるタイプ:IO文字列実際のタイプ:Maybe文字列」Haskellで

トムバート

私はモナドに頭を包み込もうとしていますが、これがコンパイルされない理由を説明できれば、理解が深まると思います。

module Main where
import Data.Maybe
import System.Environment

myFunc :: String-> Maybe String
myFunc x = Just x

main :: IO ()
main = myFunc "yo" >>= putStrLn 

私が得るエラーは

blah.hs:9:10:
    Couldn't match type `Maybe' with `IO'
    Expected type: IO String
      Actual type: Maybe String
    In the return type of a call of `myFunc'
    In the first argument of `(>>=)', namely `myFunc "yo"'
    In the expression: myFunc "yo" >>= putStrLn

私は、問題は私が一致しようとしているということであることを認識MaybeしてIO、私はIOに私Maybe'd変数をキャストする方法がわからないんだけど全体。どんな助けでも大歓迎です!

彼自身

あなたが一致しようとしていることを実現するのに適切であるMaybeIObind(>>=)演算子でタイプチェックを行うには、両方のモナドが同じである必要があります。この問題を解決する1つの方法Maybeは、次IOを使用してモナドでラップすることreturnです。

return (myFunc "yo") >>= putStrLn . show

またはもっと簡単に:

return (myFunc "yo") >>= print

そうは言っても、ここではすべての派手なモナド演算子は必要ありません。これは単に機能するはずです:

main :: IO ()
main = print . myFunc $ "yo"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ