Composing monad actions with folds

后端 未结 3 758
醉梦人生
醉梦人生 2021-01-19 19:45

Let\'s take a function of type (Monad m) => a -> m a. For example:

ghci> let f x = Just (x+1)

I\'d like to be able to

3条回答
  •  既然无缘
    2021-01-19 20:34

    If you make f strict as in

    f x = let y = x+1 in y `seq` Just y
    

    or

    -- remember to enable -XBangPatterns
    f !x = Just (x+1)
    

    and leave the rest alone, your code runs in constant space (albeit slowly) even with very large n:

    ghci> times 4000000000 f 3
    Just 4000000003

提交回复
热议问题