내가 가진 :하스켈 : 모나드 스택 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에서 후행하는'_'은 일반적으로 "결과 무시"를 의미합니다. –