从书中了解一个haskell ,我发现isAlpha
和isLetter
都会检查一个字符是否是一个字母。
我找到了一个问题和答案here,其中说这两个函数没有区别。
现在,我想知道为什么haskell
保留它们两者?出于历史原因?
我找到了一个解释here,它说要保留两个向后兼容性,但我不确定它是否正确。
有谁知道更多?
答案 0 :(得分:10)
注意:以下内容仅针对ghc
走在git log of ghc's source和archive of Haskell Cafe附近,我找到了一些信息来回答你的问题。虽然它不是一个直接的答案,而且充满了垃圾信息,但希望这会有所帮助。
isAlpha
已于1996年纳入initial revision。
在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提出的 并最终成功。
为了增强对unicode的支持,在this commit中添加了isLetter
,isMark
,isNumber
,......等功能。提交的评论说:
添加Dimitry Golubovsky的Unicode角色 类实现。这将消除对libc的依赖 语言环境代码,并为我们提供更加一致的Unicode支持 跨平台。
并在Unicode.hs
这些是从Hugs Unicode.hs复制的
两天后,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
功能。我没有足够的时间进一步调查,但我写了我研究过的所有信息。