私はハスケルにインタプリタを書いていますが、map:name_of_function - >関数の定義を持っています。`おそらく`を扱うときに `case`を避ける方法
Map String Defun
マイ通訳モナド:
type InterpreterMonad = StateT (EnvFun, (Stack EnvEval)) (ErrorT String IO)()
そして、あなたが見ることができるように、 "最後の" モナドはErroT
です。今
、私はハンドルを呼び出す機能を希望する場合:
handleFCall :: Stmt -> InterpreterMonad
handleFCall (VarName name) args = get >>= \(envFun, contextStack) -> case (Map.lookup (VarName name) envFun) of
Nothing -> throwError "Err"
(Just x) -> DoSthOther
をそして、あなたが見ることができるように私はcase
を使用する必要があります。しかし、私は>>=
を使用していますので、ここではcase of
を避けたいと思います。しかし、Map.lookup
返信Nothing
が失敗しました。私はエラーメッセージを追加したいと思います。
私はハスケルでの経験がないので、それに対処する方法がわかりません。私のコードに対するすべての批判は大歓迎です。
乾杯。