ここにいくつかの例があります:
interpret "head [True,False]" (as :: Bool)
interpret "head $ map show [True,False]" infer >>= flip interpret (as :: Bool)
ここで、「目撃者を提供するために解釈で使用される便利な関数」:
as :: Typeable a => a
infer :: Typeable a => a
の PS APILanguage.Haskell.Interpreter
はあまりユーザーフレンドリーではありません。サンプルファイルを調べないと、その使用法は私にとって難問になるでしょう(高度なHaskellerではありません)。
しかし、ここでの例の助けを借りて、次のようになります。
Prelude> import Language.Haskell.Interpreter as I
Prelude I> runInterpreter $ setImports ["Prelude"] >> interpret "map (*2) [1,2,3]" (as :: [Int])
Right [2,4,6]
役立つサンプル ファイルは にあります~/.cabal/packages/hackage.haskell.org/hint/0.3.3.5/hint-0.3.3.5.tar.gz
。
interpret
によって制約されたモナド内で実行する必要があるように見えますMonadInterpreter m
:
Prelude I> :t runInterpreter
runInterpreter
:: (Functor m, Control.Monad.CatchIO.MonadCatchIO m) =>
InterpreterT m a -> m (Either InterpreterError a)
Prelude I> :t interpret
interpret
:: (Data.Typeable.Internal.Typeable a, MonadInterpreter m) => String -> a -> m a
MonadInterpreter
IO には明らかにクラスのインスタンスがないため、エラーが発生します。IO
GHCI のモナドはインタプリタ セッションに関する必要な情報を持っていないため、これは予期された動作です。によって適切なモナド型が設定されなければなりませんrunInterpreter
。