- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Ed Kmett 的 recursion-scheme
包中,有三个声明:
newtype Fix f = Fix (f (Fix f))
newtype Mu f = Mu (forall a. (f a -> a) -> a)
data Nu f where
Nu :: (a -> f a) -> a -> Nu f
这三种数据类型有什么区别?
最佳答案
Mu
表示递归类型作为其折叠,Nu
表示它作为其展开。在 Haskell 中,这些是同构的,并且是表示同一类型的不同方式。如果你假装 Haskell 没有任意递归,这些类型之间的区别就会变得更有趣:Mu f
是 f
的最小(初始)不动点,而 Nu f
是其最大(终端)不动点。
f
的不动点是 T
类型,是 T
和 f T
之间的同构,即一对反函数in::f T -> T
、out::T -> f T
。类型Fix
只是使用Haskell的内置类型递归来直接声明同构。但是您可以为 Mu
和 Nu
实现输入/输出。
举一个具体的例子,假设您无法编写递归值。 Mu Maybe
的居民,即值 ::forall r。 (也许 r -> r) -> r
是自然数,{0, 1, 2, ...}; Nu Maybe
的居民,即值 ::exists x。 (x, x -> Maybe x)
是余自然数 {0, 1, 2, ..., ∞}。考虑这些类型的可能值,看看为什么 Nu Maybe
有一个额外的居民。
如果您想对这些类型有一些直觉,那么在不使用递归的情况下实现以下内容可能是一个有趣的练习(大致按难度递增的顺序):
zeroMu::Mu Maybe
、succMu::Mu Maybe -> Mu Maybe
zeroNu::Nu Maybe
、succNu::Nu Maybe -> Nu Maybe
、inftyNu::Nu Maybe
muTofix::Mu f -> 修复 f
、fixToNu::修复 f -> Nu f
inMu::f (Mu f) -> Mu f
, outMu::Mu f -> f (Mu f)
inNu::f (Nu f) -> Nu f
, outNu::Nu f -> f (Nu f)
您也可以尝试实现这些,但它们需要递归:
nuToFix::Nu f -> 修复 f
、fixToMu::修复 f -> Mu f
Mu f
是最小不动点,Nu f
是最大不动点,所以写一个函数 ::Mu f -> Nu f
很容易,但是写一个函数 ::Nu f -> Mu f
就很难了;这就像逆流游泳。
(一度我打算对这些类型写一份更详细的解释,但对于这种格式来说可能有点太长了。)
关于haskell - Ed Kmett 的递归方案包中的 Fix、Mu 和 Nu 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580858/
我在 sklearn 中使用 NuSVC 类。在尝试如下实例化 NuSVC 对象之后: self.classifier = OneVsRestClassifier(NuSVC()) 我发现我反复收到“
如何设置 Xom.nu,使元素像这样关闭: 而不是 。 我想这样做的原因是,这个 XML 将被导入到一个工具中,不幸的是,该工具识别以前的“关闭标记约定”。 最佳答案 XOM 是一个非常简单的 API
我在将数据从字符串转换为整数时遇到问题。 比如原始数据是这样的 orderdt[1:10,2] [1] 71004 13943 11337 9647 9363 6836 5957 5167
我的一个同事今天注意到 sort 命令有一些奇怪的行为,我想知道是否有人知道这个命令的输出是否是有意的? 给定文件: ABC_22 ABC_43 ABC_1 ABC_1 ABC_43 ABC_10 A
我想在一个文本文件中包含 nu.nl 的新闻标题,这样我就可以在我的一个 bash 脚本中使用它们。我也想用 bash 脚本提取这些标题。 我添加了今天 nu.nl 主页的屏幕截图 (http://i
我正在尝试弄清楚处理这种情况的最佳方法是什么。 假设我有一个被多个不同的不相关解决方案引用的库,我们称它为 WebServiceInterface.dll。该库依赖于 JSON.NET。 在 NuGe
我在玩这个site ,我陷入了 random4 问题。 所以,基本上,问题如下。 var random4 = new function() { var rand = Math.random();
我试图通过以下方式在Grails中将JSON转换为XML: import net.sf.json.JSONObject import net.sf.json.xml.XMLSerializer ...
我想使用 validator.w3.org/nu 的 API。 文档:https://github.com/validator/validator/wiki/Service:-Input:-GET 我
我正在尝试安装本地版本的 Validator.nu 服务器,但它在尝试构建 HTML 解析器时总是失败。 它说它找不到我在 .bashrc 文件中设置的 JAVA_HOME 变量,当我在提示符下键入“
我正在验证 HTML5 页面并返回以下 2 个警告:信息:内容类型为文本/html。使用 HTML 解析器。信息:使用支持 SVG 1.1、MathML 3.0、RDFa 1.1 和 ITS 2.0
关于 paper 的 mercury 说明如下: The if-then-else and negation constructs in most variants of Prolog are non
我正在尝试在 Sklearn 中创建一个 Matern 内核,并将参数 nu 设置为无穷大。 from sklearn.gaussian_process.kernels import Matern i
我正在尝试对具有 5000 列和 30 行的数据框进行 PCA Sample sum(is.na(Sample)) [1] 0 > sum(is.na(Sample.scaled)) [1] 90
在 Ed Kmett 的 recursion-scheme 包中,有三个声明: newtype Fix f = Fix (f (Fix f)) newtype Mu f = Mu (forall a.
我正在使用https://github.com/patternconsulting/opencv将 opencv 3.2.0 包含在我的 maven java 项目中。 我面临的问题是,当我使用
validator.nu gem 抛出 YAJL 弃用警告,偶尔会完全失败,引用 HTTPStream 的问题。是否有任何稳定的 ruby gem 可以验证 HTML5 文档? 例如 req1.9
我对R非常陌生,目前正在尝试创建Siber椭圆。 我观看了使用省略号比较社区成员的potcast :( http://www.tcd.ie/Zoology/research/research/theo
是否可以将 nu.XOM.Element 转换为 org.w3c.dom.Element? 我正在尝试使用 XOM API 构建 XML。但我的旧版 API 很少需要 org.w3c.dom.Elem
我使用了来自 XMLBeans 的 scomp 工具生成 java 类,然后填充 XmlObject 中的字段(我前段时间写了这段代码)。我现在需要将此对象转换为 Element XOM librar
我是一名优秀的程序员,十分优秀!