OCaml/ReasonML是否支持核心语言或核心库中的DSL?

OCaml/ReasonML是否支持核心语言或核心库中的DSL?,ocaml,dsl,reason,Ocaml,Dsl,Reason,Groovy、Kotlin和Scala等语言提供了对DSL开箱即用的支持(例如:和)。OCaml/ReasonML在其核心语言或核心库中是否支持DSL?当然,这是函数式编程的主要功能,因此在OCaml中无法做到这一点会令人惊讶。这对于ML来说是如此自然,以至于不需要任何特殊的工具或技术 让我们举几个例子。我将从我编写的库开始,它被称为,它提供了一种完全嵌入OCaml中的类型安全查询语言,使用OCaml类型检查器验证查询的类型是否正确。这里有一些例子 选择所有GPA率大于3.8的学生 select

Groovy、Kotlin和Scala等语言提供了对DSL开箱即用的支持(例如:和)。OCaml/ReasonML在其核心语言或核心库中是否支持DSL?

当然,这是函数式编程的主要功能,因此在OCaml中无法做到这一点会令人惊讶。这对于ML来说是如此自然,以至于不需要任何特殊的工具或技术

让我们举几个例子。我将从我编写的库开始,它被称为,它提供了一种完全嵌入OCaml中的类型安全查询语言,使用OCaml类型检查器验证查询的类型是否正确。这里有一些例子

  • 选择所有GPA率大于3.8的学生

    select
      ~where:(student.(gpa) > float 3.8)
      (from students)
    
  • 选择GPA大于3.8的所有学生及其相应的教师(假设教师是教师表的外键)

  • 下面的SQL语句

    SELECT name FROM students WHERE gpa > 3.5
    
  • 表示为

        foreach Query.(select
                         ~where:(student.(gpa) > float 3.8)
                         (from students))
          ~f:(fun s -> return (Student.name s))
    

    在OCaml中编写eDSL的一个很好的资源是Oleg的页面。另一个例子是用于书写的eDSL。当然,我不能错过,但这是一个稍微不同的故事。无论如何,还有很多其他的例子,但我希望这足以让人有这种感觉

    当然,这是函数式编程的主要功能,因此在OCaml中无法实现这一点会令人惊讶。这对于ML来说是如此自然,以至于不需要任何特殊的工具或技术

    让我们举几个例子。我将从我编写的库开始,它被称为,它提供了一种完全嵌入OCaml中的类型安全查询语言,使用OCaml类型检查器验证查询的类型是否正确。这里有一些例子

  • 选择所有GPA率大于3.8的学生

    select
      ~where:(student.(gpa) > float 3.8)
      (from students)
    
  • 选择GPA大于3.8的所有学生及其相应的教师(假设教师是教师表的外键)

  • 下面的SQL语句

    SELECT name FROM students WHERE gpa > 3.5
    
  • 表示为

        foreach Query.(select
                         ~where:(student.(gpa) > float 3.8)
                         (from students))
          ~f:(fun s -> return (Student.name s))
    

    在OCaml中编写eDSL的一个很好的资源是Oleg的页面。另一个例子是用于书写的eDSL。当然,我不能错过,但这是一个稍微不同的故事。无论如何,还有很多其他的例子,但我希望这足以让人有这种感觉

    是的,它们叫做函数!IME普通函数对于我所需要的大多数DSL都可以正常工作。撇开半个玩笑不谈,“DSL”过于宽泛和模糊,我认为无法充分回答。你应该更具体一些。是的,它们叫做函数!IME普通函数对于我所需要的大多数DSL都可以正常工作。撇开半个玩笑不谈,“DSL”过于宽泛和模糊,我认为无法充分回答。你应该尽量说得更具体些。