Ale*_*kin 21 f# haskell functional-programming algebraic-data-types discriminated-union
我正在学习Haskell,并想知道Haskell中已知的代数数据类型是否与F#中的区分联合相同,或者它们之间存在一些细微差别.
我还非常感谢F#(我的第一个函数式语言)与其他函数式语言之间的良好比较,特别是在类似概念方面,但具有实质性但重要的差异.
(我来自OCaml,但我查看了相关的F#内容,看起来是一样的.如果我错了,请纠正我.)它们是相同的,只是同一个术语的不同术语,但有一些语法差异.例如,要定义一个具有多个数据元素的构造函数,在OCaml和F#中,您可以将类型写入,如同它们被填充在元组中一样:
哈斯克尔:
data Whatever = Foo TypeA TypeB
Run Code Online (Sandbox Code Playgroud)
OCaml/F#:
type whatever = Foo of typeA * typeB
Run Code Online (Sandbox Code Playgroud)
类似地,对于模式匹配,您同样就像一个参数,它是一个元组,其中包含所有数据成员:
哈斯克尔:
case x of Foo a b -> ...
Run Code Online (Sandbox Code Playgroud)
OCaml/F#:
match x with Foo (a, b) -> ...
Run Code Online (Sandbox Code Playgroud)
编辑:显然以下内容不适用于F#
此外,在Haskell中,构造函数自动成为一个函数,您可以像其他任何值一样使用它:
zipWith Foo xs ys
Run Code Online (Sandbox Code Playgroud)
OCaml/F#不这样做.您可以为每个构造函数手动定义自己的函数.
我对Haskell不太熟悉(我只读了Learn Learn a Haskell),但我还没有遇到DU和Haskell的代数数据类型之间的基本区别-他们都试图对同一概念建模。话虽如此,F#和Haskell具有非常不同的类型系统(例如,Haskell具有类型类/高级类型; F#扎根于OOP等),因此存在不对称性,但不限于这些数据类型。
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |