Created
July 3, 2016 12:40
-
-
Save eiel/836ceaad76c594f896a56e3b34c01cb3 to your computer and use it in GitHub Desktop.
MaybeTについて学んだ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Main where | |
import System.Environment | |
import Data.Maybe | |
import Control.Monad.Trans.Maybe | |
import Control.Monad.Trans.Class | |
-- sample >>= fromMaybe (putStrLn "not found") | |
sample1= do | |
maybeHoge <- lookupEnv "Hoge" | |
return $ do | |
hoge <- maybeHoge | |
return $ putStrLn hoge | |
sample1_5 = do | |
maybeHoge <- lookupEnv "Hoge" | |
case maybeHoge of | |
Just hoge -> putStrLn hoge >> return (Just ()) | |
Nothing -> return Nothing | |
-- sample2 | |
sample2 = do | |
maybeHoge <- lookupEnv "Hoge" :: IO (Maybe String) | |
let hoge = fromMaybe "not found" maybeHoge | |
putStrLn hoge | |
-- sample3 | |
sample3 = do | |
hoge <- MaybeT $ lookupEnv "Hoge" | |
lift $ putStrLn hoge | |
sample4 = do | |
maybe <- runMaybeT sample3 | |
case maybe of | |
Nothing -> putStrLn "not found" | |
_ -> return () | |
sample5 = do | |
maybe <- sample1_5 | |
case maybe of | |
Nothing -> putStrLn "not found" | |
_ -> return () | |
main = runMaybeT sample3 | |
➜ IoMaybeA |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment