2016-08-14 2 views
0

は私が持っている:ハスケル:モナドスタックIOと結合すると、[]

stuff :: IO [String] 
doThings :: String -> IO [()] 

と私は

stuff >>= doThings 

にしたいが、私のタイプがオフになっています。私は本質的に持ち上げられたバインドをしたいが、私が試みることはすべて微妙に間違っている。あなたが行うことができ、あなたのオリジナルのタイプで

+5

'do xs < - stuff; mapM_ doThings xs'?あなたは正確に何をしようとしていますか?また、 '[()]'はかなり役に立たない型です。 'Int'は十分ではない?あるいは、あなたは 'String - > IO()'型しか持てませんか? – Bakuriu

+0

ありがとう!私は '[()]を'() 'に変更し、' mapM_'を使用しました。 –

+2

'mapM'を使って、' [()] '(あなたがそれを望む理由があると仮定して)'を保つことができます。 Haskellの末尾の '_ 'は、通常、「結果を無視する」ことを意味することに注意してください。 –

答えて

1

、:

stuff >>= mapM_ doThings 

これはまた、あなたがそのような機能の多くを持っていればタイプdoThings :: String -> IO()

0

を持っているdoThingsを変更した場合、これは教科書のユースケースで動作しますListT

main = runListT $ do 
    string <- ListT stuff 
    ListT $ doThings string