Haskell “do nothing” IO, or if without else

后端 未结 2 785
挽巷
挽巷 2020-12-08 12:42

I want to do something in Haskell that looks like this:

main1 = do s <- getLine
           if s == \"foo\" then putStr \"You entered foo\"
相关标签:
2条回答
  • 2020-12-08 13:13

    The easiest way to do a no-op in a monad is:

    return ()
    

    Equivalently:

    pure ()
    

    However, for the particular idiom you're doing, there's a combinator already made for you:

    import Control.Monad
    main = do s <- getLine
              when (s == "foo") $ putStr "You entered foo"
    

    This when combinator behaves exactly like your doIf combinator :)

    0 讨论(0)
  • 2020-12-08 13:29

    You can use Hoogle to find functions, in this case: when.

    In Hoogle, you can enter the type signature, and it will try to find matching functions in the standard libraries by unifying the types and reordering arguments.

    In your case, you can simply enter the type of your doIf function: Bool -> IO () -> IO () . when is the third answer here, its reverse unless is there also.

    0 讨论(0)
提交回复
热议问题