モナド使用側関数

が適当に命名した名前
モナド返す関数を使用する側の関数のこと
以下のようなコードの main
hsimport Control.Monad.State
type Stack = [Int]
pop :: State Stack Int
pop = state $ \(x : xs) -> (x, xs) -- (x, xs)は(Int, Stack)
push :: Int -> State Stack ()
push a = state $ \xs -> ((), a : xs)
stackMainp :: State Stack Int
stackMainp = do
push 3
pop
pop
main = do
print $ runState stackMainp [11, 12, 13, 14, 15]
こうした関数を定義する際に気にすることを見る
hsmain = do
-- どのようにしてモナドを使用するか
知っておくと良いこと
runHoge
は基本的には値として使う
runStateの返り値をモナドとして使用
hsf :: (Int, Stack)
f = do
b <- runState stackMainp [11, 12, 13, 14, 15] -- (State Stack) Int
return b
runStateは State Stack
という m a
を返すので、 b
は Stack
になる
runStateの返り値を値として使用
hsg :: IO ()
g = do
let a = runState stackMainp [11, 12, 13, 14, 15]
print a
ruunStateは (Int, Stack)
という値を返すので、 a
は (Int, Stack)
になる
この2つの選択肢があるが、ほぼ後者