型と型クラス

import List

-- Line型の宣言
data Line = Line { number :: Int,
                   string :: String} deriving Show

-- number部分だけ受け取って作る。string部分は"abc"で固定
line :: Int -> Line
line x = Line x "abc"

-- Lineのリストであるline'
line' :: [Line]
line' = line 2 : line 1 : line 3 : line 4 : []

-- Lineのリストをnumberで昇順ソート
sortLines :: [Line] -> [Line]
sortLines xs = sortBy (\x y -> (number x) `compare` (number y)) xs

-- Lineリストを作成、numberで昇順にソートして、表示する。
main = do print line'
          print $ sortLines line'

ここから下は実行結果
[Line {number = 2, string = "abc"},Line {number = 1, string = "abc"},Line {number = 3, string = "abc"},Line {number = 4, string = "abc"}]
[Line {number = 1, string = "abc"},Line {number = 2, string = "abc"},Line {number = 3, string = "abc"},Line {number = 4, string = "abc"}]
ここまで

ソースもたまには張ってみたくなったのでペタペタ。
んで、思ったの。
line'は変数なのか、関数なのか。
sortLinesは変数なのか、関数なのか。
まあ、引数がどうのってのはあるけど、
全部関数って考え方もできるし、変数って見方もできるわけか。
ちょい感動。