[Haskell-cafe] isLetter vs. isAlpha
Artyom Kazak
artyom.kazak at gmail.com
Wed Nov 21 22:59:20 CET 2012
Hello!
I saw a question on StackOverflow about the difference between isAlpha and
isLetter today. One of the answers stated that the two functions are
interchangeable, even though they are implemented differently.
I decided to find out whether the difference in implementation influences
performance, and look what I found:
> import Criterion.Main
> import Data.Char
>fTest name f list = bgroup name $ map (\(n,c) -> bench n $ whnf f c) list
>tests = [("latin", 'e'), ("digit", '8'), ("symbol", '…'), ("greek", 'λ')]
>main = defaultMain [fTest "isAlpha" isAlpha tests,
> fTest "isLetter" isLetter tests]
produces this table (times are in nanoseconds):
latin digit symbol greek
----- ----- ------ -----
isAlpha | 156 212 368 310
isLetter | 349 344 383 310
isAlpha is twice as fast on latin inputs! Does it mean that isAlpha should
be preferred? Why isn’t isLetter defined in terms of isAlpha in Data.Char?
More information about the Haskell-Cafe
mailing list