- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Haskell 98 之前,有 Haskell 1.0 到 1.4。看到这些年来的发展是非常有趣的,因为标准化 Haskell 的最早版本中添加了功能。
例如,do 表示法首先由 Haskell 1.3 标准化。 (发表于 1996 年 5 月 1 日)。在前奏
中,我们找到以下定义(第87页):
-- Monadic classes
class Functor f where
map :: (a -> b) -> f a -> f b
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
m >> k = m >>= \_ -> k
class (Monad m) => MonadZero m where
zero :: m a
class (MonadZero m) => MonadPlus m where
(++) :: m a -> m a -> m a
Haskell 1.4 中也有相同的定义。我确实对此有一些问题(例如 MonadPlus
reform 还没有发生在这里),但总的来说,这是一个非常好的定义。
这与 Haskell 98 有很大不同,其中有以下定义:
-- Monadic classes
class Functor f where
fmap :: (a -> b) -> f a -> f b
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a
-- Minimal complete definition:
-- (>>=), return
m >> k = m >>= \_ -> k
fail s = error s
这也是Haskell 2010中的定义。我对这个定义有以下问题:
MonadZero
和 MonadPlus
消失了。它们是有用的类(class)。如果 do 表示法中的模式匹配失败...
零
。适用左零定律(零 >>= k = 零
),因此您知道会发生什么。fail msg
,其中 msg
在 GHC 情况下由编译器生成。任何事情都可能发生,无法保证其语义。因此,对于用户来说,这并不是什么功能。 因此,Haskell 98 的 do 表示法中模式匹配失败的行为是不可预测的!名称不太通用(例如 map
与 fmap
)。虽然问题不大,但就是眼中钉。
总而言之,我认为这些改变并不是最好的。事实上,我认为它们是 Haskell 1.4 的倒退。 为什么 Haskell 98 进行了这些更改,为什么要以这种方式进行更改?
<小时/>顺便说一句,我可以想象以下防御:
fail
允许定位错误。” 仅适用于程序员,且仅在运行时。 (不可移植!)错误消息并不完全是您想要解析的内容。如果你真的关心它,你应该明确地跟踪它。现在,我们从 failure
包中获得了 Control.Failure
,它在这方面做得更好(failure x
的行为大多类似于 zero
)。SimplePrelude
来代替,而删除了大部分类呢?对于学生来说,这只是一个神奇的声明,他们可以做到这么多。 (也许还需要 {-# LANGUAGE RebindableSyntax #-}
,但同样,学生非常擅长复制粘贴内容。)fmap
的频率比 map
多得多,所以为什么不使用 改为使用map
和listMap
?最佳答案
Why were these things changed for Haskell 98, and why in this way?
Haskell 98 对语言进行了大量简化(其中大部分已被逆转)。目标是改进 Haskell 作为教学语言,并做出相对保守的选择。
参见例如
We regarded Haskell 98 as a reasonably conservative design. For example, by that time multi-parameter type classes were being widely used, but Haskell 98 only has single-parameter type classes (Peyton Jones et al., 1997).
还有:
Haskell 98 will by no means be the last revision of Haskell. On the contrary, we design it knowing that new language extensions (multi-parameter type classes, universal and existential quantification, pattern guards, etc, etc) are well on the way. However, Haskell 98 will have a special status: the intention is that Haskell compilers will continue to support Haskell 98 (given an appropriate flag) even after later versions of the language have been defined, and so the name `Haskell 98' will refer to a fixed, stable language.
因此,事情被简化了,目标是制定一个更简单的标准。
关于haskell - 为什么 Haskell 9 是 8's standard classes made inferior to Haskell 1.3' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761302/
JavaScript Standard Style 翻译: Português, Spanish, 繁體中文, 简体中文 standard 规则列表,太多不必阅读。 了解 standard 的最好方式
我有一个 exec我使用 outputproperty 将其输出放入属性的任务属性。该命令可能会向 stderr 打印一些错误,我不希望将这些错误包含在输出中(因为输出被馈送到另一个命令中),而是要打
标题说明了一切 - 如何将 .NET 标准库标记为符合 CLS? 我用 C# 编写了一个简单的库,目标是 .NET Standard 1.0 框架。它包括两个枚举: public enum Align
我有一个写入错误输出的 PowerShell 脚本。该脚本可以简单如下: Write-Error 'foo' Start-Sleep -s 5 Write-Error 'bar' 我实际调用的脚本产生
对于完整的 .NET 项目,您可以在 Project Properties > Application tab > Assembly Information.. 中勾选一个框以使项目 COM 可见。
我将我的项目 ( https://github.com/MarkKhromov/The-Log) 迁移到 .NET Standard 2.0,但我的应用程序构建已损坏。我该如何解决这个问题? 我的解决
互联网上的许多文章都使用“标准输入/输出/错误流”术语好像每个术语都与使用的“标准输入/输出/错误设备”术语具有相同的含义在其他文章上。例如,很多文章说标准输出流默认是监视器,但可以重定向到文件、打印
我正在尝试从 https://github.com/go-yaml/yaml 导入 go-yaml ,并且我看到了 Google 未提供帮助的错误。 我运行了 go get gopkg.in/yaml
在列出 TimeZoneInfo.GetSystemTimeZones 返回的 TimeZoneInfo 的所有 Id 属性时,出现了两个版本的 EST:美国东部标准时间和东部标准时间。有什么区别?
问题: 如函数的 C 引用页所述,c16rtomb,来自 CPPReference ,在注释部分下: In C11 as published, unlike mbrtoc16, which conve
我想使用 go 语言从我的数据库中检索一些数据。这是我在文件 main.go 中的代码的开头 package main import ( _ "github.com/go-sql-driver
我一直在通过STM32F4发现进行音频项目,我注意到一件事,所有I2S标准仅适用于一个麦克风(取决于标准使用单独的位的哪个边缘)。例如飞利浦(Philips),MSB或LSB标准使用下降沿作为位触发,
有没有标准定义了 语法 和 语义的 汇编语言 ?与语言类似 C 有 ISO 标准和语言 C# 有 ECMA 标准?是只有一种标准,还是有更多标准? 我问是因为我noticed那个汇编语言代码看了不同
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 1年前关闭。 Improve this
我们正在内部构建API,并且经常传递带有多个值的参数。 他们使用:mysite.com?id=1&id=2&id=3 代替:mysite.com?id=1,2,3 我赞成第二种方法,但我很好奇是否真的
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我认为有很多人不知道RFC(征求意见)。我知道它们在逻辑上是什么,但是有人能为新开发人员提供一个很好的描述吗?另外,共享一些有关如何使用和阅读它们的资源也很好。 最佳答案 这个术语来自互联网的前身AR
我找不到 Somaliland 的两个字母的国家/地区缩写,可能是因为它不是一个国家,而是正如维基百科所说:“一个未被承认的 self 宣布的事实上的主权国家,被国际承认为索马里的一个自治区”。尽管如
我正在编写一款蜜 jar 软件,该软件将对其交互进行大量记录,我计划记录纯文本 .log 文件。 我有两个问题,来自不太熟悉服务器日志方式的人。 首先,我该如何分解我的日志文件,我假设运行一个月后我不
我最近负责调试两个不同的程序,这两个程序最终至少需要共享一个 XML 解析脚本。一个是用 PureMVC 编写的,另一个是从头开始构建的。虽然最初从头开始编写是有意义的(它节省了大量内存,但内存问题已
我是一名优秀的程序员,十分优秀!