haskell - 在 Haskell 中实现 DSL

标签 haskell

这可能是一个非常基本的问题。

我正在开发一种 DSL,最终我可以说:

import language.cwmwl
main = runCWMWL $ do
    eval ("isFib::", 1000, ?BOOL)

我刚刚开始研究解释器函数 runCWMWL,我想知道是否有可能以某种方式(以及如何?)在 do block 内部或外部转义到真正的 Haskell。

我想在我的解释器中为一些必需的 prelude 函数(例如 print)提供一个默认包装器,但我想知道是否有更优雅的方法来共同定位 DSL 和 Haskell 而不会失败恢复为普通图书馆。

最佳答案

查看 Template Haskell 中的 QuasiQuoting 。你可能会做

import Language.CWMWL

main = runCWMWL [eval|
     ("isFib::", 1000, ?BOOL) |]

main = [run|("isFib::", 1000, ?BOOL) |]

或者任何适合你的东西。

关于haskell - 在 Haskell 中实现 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670313/

相关文章:

haskell - LiquidHaskell : Trying to use assume keyword, 但数据类型不是数字

function - 在 Haskell 中,(+) 是一个函数,((+) 2) 是一个函数,((+) 2 3) 是 5。到底发生了什么?

haskell - Haskell 中具有 LHS 和 RHS 函数的函数定义如何/为什么起作用?

haskell - 鉴于我知道实际数字,如何构建 ThreadId?

haskell - 声明适用于具有特定字段的 Vinyl 记录的约束

haskell - 使用 head、tail 和 null 对列表中的元素进行乘积

haskell - 在haskell中foreach的初学者/学习者实现

list - 如何在 Haskell 中提取所有唯一的列表对?

haskell - 用户管理一键完成

haskell - 如何获得一致的标准基准,或跨运行解释结果?