を一致させる方法がわからない、私は解決するために、このHaskellの質問があります:ハスケル:私はそう種類
入力に機能f
と入出力アクションa
と結果を受け取るmapIO
関数を定義し、実行されると、与えられたアクションa
を実行し、a
の戻り値にf
というアプリケーションを返します。ここで
は私のコードです:
mapIO f a = do b <- a
return f(b);
それはコンパイルが、それは動作しません。次の実行例と同じことをしようとすると、動作しません。どうか、誰かが私を助けることができますか?他の多くの言語で
Prelude Data.Char> mapIO even readLn
75
False
どうしたらうまくいかないのですか? '75'は奇妙なので、' IO'で囲まれた 'False'である' IO Bool'を取得します。 –
'return f(b);'は 'return $ f b'または' return(f b) 'でなければなりません。 @WillemVanOnsem私はそれが実際の出力ではなく、実際の出力ではないと考えています。 – Zpalmtree
'return f(b)'は 'return fb'として解析されます。つまり' f'と 'b' 。 'return'はあなたが期待するキーワードではありません(つまり、多くの命令/ OO言語のように)、関数の適用優先順位の通常の規則に従います。 – user2407038