generated at
モナド使用側関数
mrsekutが適当に命名した名前
モナド返す関数を使用する側の関数のこと

以下のようなコードの main
hs
import 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]

こうした関数を定義する際に気にすることを見る
hs
main = do -- どのようにしてモナドを使用するか


知っておくと良いこと
runHoge は基本的には値として使う
runStateの返り値をモナドとして使用
hs
f :: (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の返り値を値として使用
hs
g :: IO () g = do let a = runState stackMainp [11, 12, 13, 14, 15] print a
ruunStateは (Int, Stack) という値を返すので、 a (Int, Stack) になる
この2つの選択肢があるが、ほぼ後者