summaryrefslogtreecommitdiff
path: root/Haskell-book/26/Exercises/src/Fix.hs
blob: bd43f7f8c593981dd226fedb37b6f82655b71c8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module Fix where

import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Maybe
import Control.Monad

isValid :: String -> Bool
isValid v = '!' `elem` v

maybeExcite :: MaybeT IO String
maybeExcite = do
    v <- liftIO getLine
    guard $ isValid v
    return v

doExcite :: IO ()
doExcite = do
    putStrLn "say something excite!"
    excite <- runMaybeT maybeExcite
    case excite of
      Nothing -> putStrLn "MOAR EXCITE"
      Just e ->
          putStrLn
            ("Good, was very excite: " ++ e)