为什么haskell同时保持isAlpha和isLetter?

时间:2014-06-06 04:02:18

标签: haskell

从书中了解一个haskell ,我发现isAlphaisLetter都会检查一个字符是否是一个字母。

我找到了一个问题和答案here,其中说这两个函数没有区别。

现在,我想知道为什么haskell保留它们两者?出于历史原因?

我找到了一个解释here,它说要保留两个向后兼容性,但我不确定它是否正确。

有谁知道更多?

1 个答案:

答案 0 :(得分:10)

注意:以下内容仅针对ghc

走在git log of ghc's sourcearchive of Haskell Cafe附近,我找到了一些信息来回答你的问题。虽然它不是一个直接的答案,而且充满了垃圾信息,但希望这会有所帮助。

isAlpha排在第一位

isAlpha已于1996年纳入initial revision

2005年初:增强ghc

中的unicode支持

在2005年初,Dimitry Golubovsky发布this question关于ghc支持unicode的能力如何。他是one of the developer of the unicode patch of hugs。也许他想增强ghc的unicode支持。

后来他离开this post

  

之前(即直到并包括6.4),处理了Unicode内容   通过基于wc * locale的函数进行宽字符转换。以来   并非每次安装Unix(或其他一些操作系统)都会设置此功能   正确(我的不是:个人痒),这个代码是为GHC提出的   并最终成功。

2005年3月14日:isLetter被添加

为了增强对unicode的支持,在this commit中添加了isLetterisMarkisNumber,......等功能。提交的评论说:

  

添加Dimitry Golubovsky的Unicode角色   类实现。这将消除对libc的依赖   语言环境代码,并为我们提供更加一致的Unicode支持   跨平台。

并在Unicode.hs

  

这些是从Hugs Unicode.hs复制的

2005年3月16日:评论"两者是相同的"被添加

两天后,this commit添加了这两条评论。

-- This function is equivalent to 'Data.Char.isAlpha'.
isLetter :: Char -> Bool
-- This function is equivalent to 'Data.Char.isLetter'.
isAlpha :: Char -> Bool

我无法找到添加此评论的原因,但我的假设是 - 因为isAlpha似乎已经支持unicode,所以这两个函数都被认为是等效的。

结论

isAlpha是最早的,后来添加isLetter以及其他一些取自拥抱的unicode函数,所以也许没有理由只从集合中删除isLetter功能。我没有足够的时间进一步调查,但我写了我研究过的所有信息。