はてなダイアリー日記 - 入力したプログラムコードを色付けするスーパーpre記法 シンタックス・ハイライトの実装について
やっとはてなダイアリーにも実装された。やっぱり、べた書きのコードはるのは見にくくて結構いやだったのでこれはうれしい所ですよ。さっそく、本日がっこうでぐだぐだ書いて見ていたコードを貼付けてみよう。
import System import Char main = do cs <- getContents args <- getArgs putStrLn $ unlines $ concatMap (splitLine $ parseArgs args) $ lines cs where parseArgs :: [String] -> Int parseArgs [] = 60 parseArgs (x:_) = if all isDigit x then stringToInt x else 60 where stringToInt :: String -> Int stringToInt cs = let n = digitToInt $ last cs in n + (stringToInt' 10 $ rdrop 1 cs) where rdrop :: Int -> [a] -> [a] rdrop n as = reverse $ drop n $ reverse as stringToInt' :: Int -> String -> Int stringToInt' _ [] = 0 stringToInt' d cs = let n = digitToInt $ last cs in n * d + (stringToInt' (d * 10) $ rdrop 1 cs) splitLine :: Int -> String -> [String] splitLine _ [] = [] splitLine n cs = let splited = splitAt n cs newline = fst splited remain = snd splited in newline : splitLine n remain
Haskellかよ。はじめてのひとがHaskell書くとこうなります。たぶん。
つかstringToIntが長すぎ。ふつうのHaskell使いはこれを鬼のように短く書けるに違いない。