モナド使用側関数
mrsekut.iconが適当に命名した名前
モナド返す関数を使用する側の関数のこと
以下のようなコードのmain
code:hs
import Control.Monad.State
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
こうした関数を定義する際に気にすることを見る
code:hs
main = do
-- どのようにしてモナドを使用するか
知っておくと良いこと
runHogeは基本的には値として使う
runStateの返り値をモナドとして使用
code:hs
f :: (Int, Stack)
f = do
return b
runStateはState Stackというm aを返すので、bはStackになる
runStateの返り値を値として使用
code:hs
g :: IO ()
g = do
print a
ruunStateは(Int, Stack)という値を返すので、aは(Int, Stack)になる
この2つの選択肢があるが、ほぼ後者