これは、状態のモナドよりもブロックの使用法に関する質問です。次のコードでは、doブロックをrunStateで直接使用できますが、flipを使用して引数の順序を逆にして、使用する初期状態が最初に指定されるようにするだけです。runStateとdoブロック
なぜ、flip構造体を使用する必要があるのですか。つまり、doブロックをrunStateの最初の引数として配置する方法はありますか?
module Main where
import qualified Data.Map as Map
import Control.Monad.State
type MapS = Map.Map Int String
-- Add an item (key value pair) to map
addItemToMap :: Int -> String -> State MapS()
addItemToMap x s = modify $ Map.insert x s
main :: IO()
main = do
let r = flip runState Map.empty $ do
addItemToMap 101 "one hundred and one"
addItemToMap 1001 "one thousand and one"
print r
'flip' *は*引数の順序をどのように切り替えるかです。 –
しかし、私の質問は、この文脈で通常の順序で引数を指定してrunStateを呼び出すのではなく、何をフリップするかについてではありません。私はこのようにdoを呼び出す方法を知らない。 – andro