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

WKP*_*lus 2 haskell

从书中学习了一个哈克尔,我发现isAlphaisLetter检查一个角色是否是一个字母.

我在这里找到了一个问题和答案,其中说这两个函数之间没有区别.

现在,我想知道为什么要haskell两者兼顾?有历史原因吗?

我在这里找到了一个解释,它说保持两个都是为了向后兼容,但我不确定这是不是确切的原因.

有谁知道更多?

ymo*_*nad 10

注意:以下仅针对ghc

ghc的源代码Haskell Cafe存档git日志中走动,我找到了一些信息来回答你的问题.虽然它不是一个直接的答案,并且充满了垃圾信息,但希望这会有所帮助.

isAlpha排在第一位

isAlpha已于1996年纳入初步修订.

2005年初:增强ghc中的unicode支持

在2005年初,Dimitry Golubovsky发布了这个问题,关于ghc如何能够很好地支持unicode.他是unicode拥抱的开发者之一.也许他想增强ghc的unicode支持.

后来他离开了这个帖子

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

2005年3月14日:isLetter被添加

为了提高unicode的,一些功能如的支持isLetter,isMark,isNumber,...,在加入这个承诺.提交的评论说:

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

并在 Unicode.hs

这些是从Hugs Unicode.hs复制的

2005年3月16日:增加了"两者相当"的评论

两天后,这个提交添加了这两个评论.

-- This function is equivalent to 'Data.Char.isAlpha'.
isLetter :: Char -> Bool
-- This function is equivalent to 'Data.Char.isLetter'.
isAlpha :: Char -> Bool
Run Code Online (Sandbox Code Playgroud)

我找不到添加此注释的原因,但我的假设是 - 因为isAlpha似乎已经支持unicode,所以这两个函数都被认为是等价的.

结论

isAlpha是最古老的,isLetter后来加入了一些其他unicode函数,这些函数是从拥抱中获取的,所以也许没有理由只isLetter从函数集中删除.我没有足够的时间进一步调查,但我写了我研究的所有信息.