Haskell から nkf を直接使って文字コードを変換する。

Cinnamonのインストールが出来たら使ってみます。
NKFの使い方については「Rubyist Magazine 標準添付ライブラリ紹介 【第 3 回】 Kconv/NKF/Iconv」のNKFの部分に丁寧な説明があります。

-- 「標準添付ライブラリ紹介 【第 3 回】 Kconv/NKF/Iconv」より
-- http://jp.rubyist.net/magazine/?0009-BundledLibraries
module Main where

import Data.Char
import Codec.Binary.UTF8.String
import Cinnamon.Ucs
import Cinnamon.Nkf

suuji="0123456789あいうABC"
kana ="カタカナ"
hira="ひらがな"
katahira ="カタカナとひらがなを交換"

str  ="禁則を考慮した折り返しを行います。禁則は通常半角 60 文字で行われますが、"++
      "明示的に -f40 と指定すると半角 40 文字で、 -f80 と指定すると半角 80 文字"++
      "で折り返します。通常、禁則は半角 10 文字までの範囲で禁則文字をぶら下げ、"++
      "それ以上は強制的に改行しますが、明示的に -f40-5 と指定すると強制改行の余地"++
      " (fold-margin) を半角 5 文字に指定できます。禁則処理を行わない場合は"++
      " -f40-0 などと指定します。-f では改行が全て半角空白に置き換えられてし"++
      "まいますが、 -F では改行が保存されます。"

main :: IO ()
main = do
    putStrLn $ nkf "-m0xZ0Ss"   $ ucs4ToSjis suuji
    -- > 0123456789あいうABC

    putStrLn $ nkf "-m0xSs --hiragana" $ ucs4ToSjis kana
    --> かたかな
    putStrLn $ nkf "-m0xSs --katakana" $ ucs4ToSjis hira
    -- > ヒラガナ
    putStrLn $ nkf "-m0xSs --katakana-hiragana" $ ucs4ToSjis katahira
    -- > かたかなトヒラガナヲ交換
    putStrLn $ nkf "-m0xSsf30"  $ ucs4ToSjis str
{-
禁則を考慮した折り返しを行いま
す。禁則は通常半角 60 文字で行
われますが、明示的に -f40 と指
定すると半角 40 文字で、 -f80
と指定すると半角 80 文字で折り
返します。通常、禁則は半角 10
文字までの範囲で禁則文字をぶら
下げ、それ以上は強制的に改行し
ますが、明示的に -f40-5 と指定
すると強制改行の余地 (fold-margin)
を半角 5 文字に指定できます。
禁則処理を行わない場合は -f40-
0 などと指定します。-f では改
行が全て半角空白に置き換えられ
てしまいますが、 -F では改行が
保存されます。
-}
> :m +  Data.Char Cinnamon Numeric
> let str=[chr 0x82,chr 0xa0]                       -- Shift-JIS
> putStrLn str -- > あ
> let showH = map (\x ->showHex (ord x) "")
> showH $ nkf "-s" str        -- > ["82","a0"]      -- Shift-JIS
> showH $ nkf "-e" str        -- > ["a4","a2"]      -- EUC-JP
> showH $ nkf "-j" str        -- > ["1b","24","42","24","22","1b","28","42"] -- ISO-2022-JP
> showH $ nkf "-w" str        -- > ["e3","81","82"]                -- UTF-8N (BOM なし)
> showH $ nkf "-m0Sw8" str    -- > ["ef","bb","bf","e3","81","82"] -- UTF-8 BOM (BOM:Byte Order Mark あり)
> showH $ nkf "-m0Sw80" str   -- > ["e3","81","82"]                -- UTF-8N

> showH $ nkf "-m0Sw16" str   -- > ["30","42"]                     -- UTF-16BE N  (Big-endian,BOM なし)
> showH $ nkf "-m0Sw16B" str  -- > ["fe","ff","30","42"]           -- UTF-16BE BOM(Big-endian,BOM あり)
> showH $ nkf "-m0Sw16B0" str -- > ["30","42"]                     -- UTF-16BE N
> showH $ nkf "-m0Sw16L"  str -- > ["ff","fe","42","30"]           -- UTF-16LE BOM(Little-endian,BOM あり)
> showH $ nkf "-m0Sw16L0" str -- > ["42","30"]                     -- UTF-16LE N  (Little-endian,BOM なし)

-- 改行コードの変更
> showH "abc\n"                         -- > ["61","62","63","a"]
> showH $ nkf "-Lw" "abc\n"             -- > ["61","62","63","d","a"]
> showH $ nkf "-Lm" "abc\n"             -- > ["61","62","63","d"]
> showH $ nkf "-Lu" $ nkf "-Lm" "abc\n" -- > ["61","62","63","a"]