ハイフンで区切られた文字をキャピタライズ

ハイフンで区切られた文字をキャピタライズ - 只今Ruby勉強中 - RubyistHaskellで書いてみました。あまり複雑なことをせずにシンプルにシンプルに書いてみました。
それにしてもWebのRuby関連のページはほどよい例題がいっぱいあってとても参考になります。

module Main (main) where

import Data.Char (toUpper, toLower)

tail' :: [a] -> [a]
tail' [] = []
tail' xs = tail xs

split :: Eq a => a -> [a] -> [[a]]
split _ [] = []
split c xs =
  let (xs1, xs2) = span (/= c) xs
  in xs1 : split c (tail' xs2)

join :: a -> [[a]] -> [a]
join _ []       = []
join _ [x]      = x
join c (x : xs) = x ++ c : join c xs

capitalize :: String -> String
capitalize []       = []
capitalize (x : xs) = toUpper x : map toLower xs

wordCapitalize :: String -> String
wordCapitalize = join '-' . map capitalize . split '-'

main :: IO ()
main = do
  print $ wordCapitalize "in-reply-to"
  print $ wordCapitalize "X-MAILER"

実行例:

$ ./cap.exe
"In-Reply-To"
"X-Mailer"