gpt4 book ai didi

haskell - 如何在 Language.Haskell.Interpreter 中使用 interpret?

转载 作者:行者123 更新时间:2023-12-02 17:46:39 26 4
gpt4 key购买 nike

解释用于评估 haskell 表达式吗?如果可以,我该如何使用它?

Language.Haskell.Interpreter> :t interpret 
interpret :: (Data.Typeable.Internal.Typeable a, MonadInterpreter m) =>
String -> a -> m a

>interpret "1+1"
<interactive>:20:1:
Ambiguous type variable `m0' in the constraint:
(MonadInterpreter m0) arising from a use of `interpret'
Probable fix: add a type signature that fixes these type variable(s)
In the expression: interpret "1+1"
In an equation for `it': it = interpret "1+1"

问候!

最佳答案

some examples here :

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

附言Language.Haskell.Interpreter 的 API 不是很友好。如果不检查它的示例文件,它的用法对我来说将是一个难题(不是高级 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 约束的 monad 中运行:

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

IO 显然没有 MonadInterpreter 类的实例,因此出现错误。这是预期的行为,因为 GHCI 的 IO monad 没有关于解释器 session 的必需信息。正确的 monad 类型必须由 runInterpreter 设置。

关于haskell - 如何在 Language.Haskell.Interpreter 中使用 interpret?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13775144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com