私のプログラムif'
では、組み込み構造の代わりに、モジュールの 1 つで定義された関数を使用していますif-then-else
。それは自明に定義されており、うまく機能します。
ただし、モナド値に適用する必要があるコードの場所が 1 つあります (IO
私の場合)。つまり、型シグネチャは のようになりますIO Bool -> IO a -> IO a -> IO a
。当然、持ち上げてみました。
if' <$> mb <*> action1 <*> action2
しかし、式を評価しようとすると、期待どおりの結果が得られません。
*Main> if' <$> return True <*> putStrLn "yes" <*> putStrLn "no"
yes
no
<*>
説明に「逐次適用」と書いてあるのは知っているので、そのせいかもしれません。しかし、ここで何が起こっているのでしょうか? まったく新しい専用関数を作成せずに修正できますか?