私はHaskellの初心者です。そして、モナドについて学んでいます。
data Container a = Container a deriving Show
x = Container 1 :: Container Int
plusOne :: Container Int -> Container Int
plusOne (Container x) = Container (x+1)
plusOne
に適用するために持ち上げる方法はありますContainer (IO Int)
か?
または、次のような新しい関数を定義する必要があります。
plusOne' :: Container (IO Int) -> Container (IO Int)
plusOne' (Container x) = Container (liftM (+1) x)
ありがとう :-) そして、 plusOne の再定義を避ける方法はありますか?
プログラムをビルドするときは、最初に非モナディック型のコンテナ (Container Int などの通常の値) を使用してプログラムをビルドし、指定された値 (Container 10..) で関数をテストします。
その後、これらのプログラムをランダムまたは生成された値に適用しようとします。これは、他の言語 (Lisp、Python など) でのプログラミングに対する私の基本的なアプローチです。
したがって、これらの関数をモナド値コンテナーに適用しようとするときに、関数を再定義したくありません。
このアプローチは Haskell プログラミングでは機能しませんか? マインドモデルを変えるべきですか?それともHaskellについて誤解していますか?