作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
允许递归类型的 OCaml 的 -rectypes 的 GHC 等价物是什么?我在文档中没有看到。是隐藏功能吗?
最佳答案
不幸的是,没有一个,所有递归都必须经过一种数据类型。但是,如果您愿意忍受一些头痛,您仍然可以很容易地编写递归类型。
newtype RecArr b a = RecArr {unArr :: RecArr b a -> b}
unfold = unArr
fold = RecArr
fold
和
unfold
我们的
RecArr
展开我们的递归,让我们心满意足。这有点痛苦,因为它是手动的,但完全可行。作为演示,这里是使用
fold
编写的 y 组合子和
unfold
.
y f = (\x -> f (unfold x x)) $ fold (\x -> f (unfold x x))
factorial f n = if n == 0 then 1 else n * f (n-1)
main = print (y factorial 5) -- prints 120
关于Haskell 等效于 -rectypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066986/
允许递归类型的 OCaml 的 -rectypes 的 GHC 等价物是什么?我在文档中没有看到。是隐藏功能吗? 最佳答案 不幸的是,没有一个,所有递归都必须经过一种数据类型。但是,如果您愿意忍受一些
一边玩-rectypes在某些时候选择 OCaml 我只是迷路了。 这个表达式几乎可以打字: # fun x -> x x;; - : ('a -> 'b as 'a) -> 'b = 但是这里 O
该字段位于 linux-4.16.12\include\linux\kfifo.h 中: #define __STRUCT_KFIFO_COMMON(datatype, recsize, ptrtyp
我是一名优秀的程序员,十分优秀!