2014-05-17 136 views
3

在哈斯克尔源toUpper展望:了解Haskell的`toUpper`

toUpper c = chr (fromIntegral (towupper (fromIntegral (ord c)))) 
... 
foreign import ccall unsafe "u_towupper" 
    towupper :: CInt -> CInt 

什么是chr含义,以及u_towupper?我对foreign import ccall unsafe也很好奇。 Haskell源实际上是变异的,因此unsafe

回答

11

第一个ordChar转换为Int,然后fromIntegral将其转换为CInt。另一方面,fromIntegralCInt转换为Int,然后chrInt转换为Char

一个unsafe外部导入意味着C函数u_towupper不会回调成haskell。如果Ghc知道这一点,那么它可以做一些优化。它与变异无关。