Monadから逃れることはできますか?
はい。これは、、、Monad、 などの多くの s で非常に簡単です。エスケープされる最も一般的なs の 1 つは、関数:です。関数を値に変換することができなければ、Haskell はあまり役に立ちません。MaybeEither aStateIdentityMonadMonad(->) r
IOから逃れることができますか?
残念ながらそうです。初心者にとっては、ググって、 を使用することから技術的に逃れることができることを確認しなければ、はるかに良いIOでしょunsafePerformIOう。通常のコードで使用することを意図したものではなく、本当に必要なときにランタイム システムへのバックドアとして使用します。主に、 などの低レベル ライブラリの実装に使用されますが、外部共有ライブラリ (DLL) とのインターフェイスにも使用されます。 そのようなコードを書いていない場合は、使用しないでください。そうしないと、型システムをバイパスするため、推論や保守が困難なコードになってしまいます。VectorunsafePerformIO
どうすれば他Monadのものから逃れることができますか?
MonadからまでさまざまですMonadが、ほとんどのモナド変換子にはrun-、eval-またはexec-メソッドがあります。
> :m Control.Monad.State
> runState (modify (*10) >> get >>= return . show) 1
("10", 10)
> :type runState (modify (*10) >> get >>= return . show) 1
runState (modify (*10) >> get >>= return . show) 1 :: (String, Int)
> evalState (modify (*10) >> get >>= return . show) 1
"10"
> execState (modify (*10) >> get >>= return . show) 1
10
にはMaybe Monad、それから逃れる方法がいくつかあります。
> :m Data.Maybe
> maybe "nada" show (Just 2)
"2"
> maybe "nada" show Nothing
"nada"
> fromMaybe 1 (Just 10)
10
> fromMaybe 1 Nothing
1
> fromJust (Just 1)
1
> fromJust Nothing
*** Exception: Maybe.fromJust: Nothing
ご覧のとおり、すべてが安全に使用できるわけではありません。
これは Happstack とどのような関係がありますか?
わかりません。Happstack を十分に使用したことがありません。ただし、簡単に検索すると、Web サイトでこの例にたどり着きました。これは、あなたの状況にかなり当てはまるようです。