数値を16進表記の文字列に変換したい

玄米カレー

Numeric.showHexあたりを使えそうだなーとは思っていたのですが、

type ShowS = String -> String

showHex :: Integral a => a -> ShowS

の意味がよくわからずにちょっと困っていました(特にShowS型が?)。でも今日ようやく使い方がわかりました。そうかー、(当たり前だけど)ShowS型ってStringを受けてStringを返す関数なのですね。つまりshowHex関数は、Stringを受けてStringを返す関数を返す関数なわけです。関数型プログラミング言語の経験があまりないので、関数を返す関数って新鮮です(関数を外から与えるのは、Rubyのブロックとか知ってるからあまり新鮮じゃないです)。
以下、完全なサンプルコードです。

module Main (main) where

import Numeric

main :: IO ()
main = putStrLn $ "[0x" ++ (showHex 0x1234 "]") -- => [0x1234]

(追記) id:nobsunさんから情報をいただきました。ShowSのありがたみについて。どうもありがとうございます。
http://www.sampou.org/haskell/tutorial-j/stdclasses.html#sect8.3
それはそれとして難読化されたコードは読めません。いまひとつ「.」を理解していないなぁ。「.」と「$」の違いをよく理解してなさげです。ふつけるで復習しとこう。