3

查看toUpper的 Haskell 源代码:

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?

4

1 回答 1

11

首先ord将 a 转换Char为 an Int,然后fromIntegral将其转换为CInt. 另一方面,fromIntegral将 a转换CInt为a Int,然后chr将 the 转换Int为 a Char

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

于 2014-05-17T18:37:23.063 回答