혼란

2016-06-20 4 views
2

나는 바이너리 형식에 숫자를 인쇄했는데, 내가 찾은 기능은혼란

showIntAtBase :: (Integral a, Show a) => a -> (Int -> Char) -> a -> ShowS 

하지만 어떻게 작동하는지 이해가 안 돼요 Int에서 Char으로 변환하는 함수 매개 변수 직관적으로,이 기능은 표시 할 수와 그것을에서 보여줄 수있는 기반을 단지 2 매개 변수를해야하고,이

showHex :: (Integral a, Show a) => a -> ShowS 

또는

showOct :: (Integral a, Show a) => a -> ShowS 
처럼 Numeric에서 더 많은 특정 기능의 경우 것 같다

(Int -> Char) 매개 변수의 용도는 무엇입니까? !! 심각한 응용 프로그램에 사용되지 않도록

+1

봐 같은 것을 사용 here] (https://www.haskell.org/hoogle/?hoogle=showintatbase) – pdexter

답변

3
Prelude Numeric> putStrLn $ showIntAtBase 10 (\n -> ['0'..'9']!!n) 26734 "" 
26734 
Prelude Numeric> putStrLn $ showIntAtBase 10 ("⁰¹²³⁴⁵⁶⁷⁸⁹"!!) 26734 "" 
²⁶⁷³⁴ 
Prelude Numeric> putStrLn $ showIntAtBase 16 ("ABCdef"!!) 0xbeef "" 
Beef 

주, 그것은 비효율적입니다. 더 나은 내가 찾은 문서 [여기] (http://hackage.haskell.org/package/base-4.9.0.0/docs/Numeric.html#v:showIntAtBase)에서

Prelude Numeric> let c0 = fromEnum '0' in showIntAtBase 10 (toEnum . (+c0)) 26734 "" 
"26734" 
+0

'ord'와'chr'가 더 적절합니다. fromEnum' /'toEnum'을 선호합니까? – pdexter

+0

@pdexter는 IMO를 정말로 중요시하지 않습니다. 어쨌든 그들은 동등합니다. 그리고 나는 GHC가 그것들을 동일한 코드로 다시 작성할 것이라고 생각합니다. 나는'ord' /'chr'을 약간 쓸모 없게 만든다. – leftaroundabout