は私が持っている:ハスケル:モナドスタックIOと結合すると、[]
stuff :: IO [String]
doThings :: String -> IO [()]
と私は
stuff >>= doThings
にしたいが、私のタイプがオフになっています。私は本質的に持ち上げられたバインドをしたいが、私が試みることはすべて微妙に間違っている。あなたが行うことができ、あなたのオリジナルのタイプで
は私が持っている:ハスケル:モナドスタックIOと結合すると、[]
stuff :: IO [String]
doThings :: String -> IO [()]
と私は
stuff >>= doThings
にしたいが、私のタイプがオフになっています。私は本質的に持ち上げられたバインドをしたいが、私が試みることはすべて微妙に間違っている。あなたが行うことができ、あなたのオリジナルのタイプで
、:
stuff >>= mapM_ doThings
これはまた、あなたがそのような機能の多くを持っていればタイプdoThings :: String -> IO()
を持っているdoThingsを変更した場合、これは教科書のユースケースで動作しますListT
:
main = runListT $ do
string <- ListT stuff
ListT $ doThings string
'do xs < - stuff; mapM_ doThings xs'?あなたは正確に何をしようとしていますか?また、 '[()]'はかなり役に立たない型です。 'Int'は十分ではない?あるいは、あなたは 'String - > IO()'型しか持てませんか? – Bakuriu
ありがとう!私は '[()]を'() 'に変更し、' mapM_'を使用しました。 –
'mapM'を使って、' [()] '(あなたがそれを望む理由があると仮定して)'を保つことができます。 Haskellの末尾の '_ 'は、通常、「結果を無視する」ことを意味することに注意してください。 –