2014-05-17 2 views
3

toUpper`이 toUpper에 대한 하스켈 소스에서 상대 :이해 하스켈의`

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

u_towupper뿐만 아니라, chr의 의미는 무엇입니까? 나는 foreign import ccall unsafe 부분에 대해서도 궁금합니다. Haskell 소스가 실제로 mutate합니까? 따라서 unsafe?

답변

11

첫 번째 ordCharInt으로 변환 한 후 fromIntegralCInt으로 변환합니다. 다른면에서 fromIntegralCIntInt으로 변환하고 chrIntChar으로 변환합니다.

unsafe 외국 가져 오기는 C 함수 u_towupper이 haskell을 다시 호출하지 않는다는 것을 의미합니다. Ghc가 이것을 알고 있다면, 최적화를 할 수 있습니다. 그것은 돌연변이와 아무 관련이 없습니다.