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に aCharを に変換しInt、次に にfromIntegral変換しCIntます。反対側では、 fromIntegralaCIntを anIntchr変換してIntから、 を aに変換しCharます。

外部unsafeインポートは、C 関数u_towupperが haskell にコールバックしないことを意味します。Ghc がこれを知っていれば、いくつかの最適化を行うことができます。突然変異とは何の関係もありません。

于 2014-05-17T18:37:23.063 に答える