暗示以下为:基于GHC API构建的Haskell解释器

[bsd3型,编译器-解释器,语言,图书馆][建议标签]

这个库定义了一个解释器monad。它允许加载Haskell模块,浏览它们,使用Haskell键入并计算字符串表达式,甚至将其强制为值。这个库是线程安全的和类型安全(甚至将表达式强制转换为值)。本质上,它是GHC API的一个巨大子集,封装在一个更简单的应用程序编程接口。


[跳到自述]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

版本[RSS(RSS)] 0.1,0.2,0.2.1,0.2.2,0.2.4,0.2.4.1,0.3.0.0,0.3.1.0,0.3.2.0,0.3.2.1,0.3.2.2,0.3.2.3,0.3.3.0,0.3.3.1,0.3.3.2,0.3.3.3,0.3.3.4,0.3.3.5,0.3.3.6,0.3.3.7,0.4.0.0,0.4.1.0,0.4.2.0,0.4.2.1,0.4.2.2,0.4.2.3,0.4.3,0.5.0,0.5.1,0.5.2,0.6.0,0.7.0,0.8.0,0.9.0,0.9.0.1,0.9.0.2,0.9.0.3,0.9.0.4,0.9.0.5,0.9.0.6,0.9.0.7,0.9.0.8(信息)
更改日志 CHANGELOG.md公司
依赖关系 基础(>=4 && <5),容器,目录,例外(>=0.10 && <0.11),文件路径,ghc公司(>=8.4 && <9.9),ghc引导,ghc路径,随机的,随机的,暂时的,变压器,unix(通用)(>=2.2.0.0)[详细信息]
许可证 BSD-3条款
作者 提示作者
维护人员 “塞缪尔·盖利诺”<gelisam@gmail.com>
类别 语言,编译程序/解释程序
主页 https://github.com/haskell-hint/hint
源回购 头部:git克隆https://github.com/haskell-hint/hint
已上传 通过凝胶状的2023-10-14T18:32:50Z
分配 架构(architecture):0.9.0.6,借方:0.9.0.3,费多拉:0.9.0.7,免费BSD:0.4.2.3,LTSHaskell公司:0.9.0.8,NixOS:0.9.0.8,堆叠:0.9.0.8
反向依赖关系 39直接,194间接[详细信息]
下载 总计74484(过去30天内为268)
额定值 2.5(票数:4)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 用户上传的文档
生成状态未知[还没有报告]

hint-0.9.0.8自述文件

[返回包描述]

暗示黑客攻击 生成状态

这个库定义了一个解释器monad,您可以在其中进行解释字符串,如"[1,2] ++ [3]"转换为如下值[1,2,3]。你可以很容易地在编译程序和解释程序之间交换数据,如只要数据具有可输入实例。

在评估这些模块时,您可以选择哪些模块应在范围内表达式,您可以浏览这些模块的内容,并且可以请求您正在浏览的标识符的类型。

例子

{-#LANGUAGE LambdaCase,ScopedTypeVariables,TypeApplications#-}进口管制。异常(throwIO)进口管制。Monad(何时)进口管制。莫纳德。事务处理。等级(电梯)进口管制。莫纳德。变速器。编写器(execWriterT,tell)导入数据。可折叠(用于_)导入数据。列表(isPrefixOf)导入数据。可打字(可打字)导入限定语言。哈斯克尔。口译员作为提示-- |--将表达式解释为值:---->>>eval@[Int]“[1,2]++[3]”--右[1,2,3]----通过以下方式将值从编译程序发送到解释程序--解释函数:---->>>右f<-eval@(Int->[Int])“\\x->[1..x]”-->>>第5页-- [1,2,3,4,5]eval::针对所有t。可键入t=>字符串->IO(任一提示。解释器错误t)eval s=提示runInterpreter$do提示setImports[“序曲”]提示解释(提示为::t)-- |-- >>> :{--做正确的内容<-浏览“前奏曲”--对于内容$\(标识符,tp)->do--when(“put”`isPrefixOf`标识符)$do--putStrLn$identifier++“::”++tp-- :}--putChar::Char->IO()--putStr::字符串->IO()--putStrLn::字符串->IO()浏览::提示。ModuleName->IO(任一提示解释器错误[(String,String)])浏览模块名称=提示runInterpreter$doHint.setImports[“序曲”,“Data.Typeable”,模块名称]exports<-Hind.getModuleExports模块名称execWriterT$do出口$\case提示。趣味标识符->dotp<-lift$Hint.typeOf标识符告诉[(标识符,tp)]_->pure()--跳过数据类型和类型类

检查示例.hs对于较长的示例(必须运行来自hint的基本目录)。

限制

不支持从当前包导入模块。它可能看起来就像它在前一天起作用,第二天就开始了。你已经被警告过了。

要解决此限制,请将这些模块移动到单独的包中。现在调用hint的代码部分和hint解释的代码可以两者都导入该模块。

无法交换值其类型包含隐式类型参数.这包括类型级列表。为了绕过这个限制,定义一个包装您的类型的newtype包装器希望.

可以在线程内运行解释器,但在GHC 8.8和下面,您不能同时运行解释器的两个实例。

GHC必须安装在编译的可执行文件所在的系统上正在运行。对此有一个变通办法,但是这不是小事.

解释代码使用的包必须安装在包中数据库,需要在运行时告知有关包数据库的提示。

包数据库最常见的用例是将解释的代码可以访问与编译代码相同的包(但不能访问编译代码自身)。实现这一点最简单的方法是通过GHC环境文件,生成GHC环境文件的最简单方法是通过阴谋集团.使用编译代码cabal build--write-ghc-environment-files=始终;这将创建一个名为.ghc.环境<某事>在电流中目录。在运行时,hint将在当前目录中查找该文件。

对于更高级的用例,您可以使用不安全运行带参数的解释器将参数传递给底层ghc库,例如-数据包-db指定包数据库的路径,或-软件包环境指定GHC环境文件的路径。