2016-08-14 11 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