型と型クラス
9.6 練習問題
うぅ、今回の練習問題、多いですね。一つ一つじっくりやっていきましょう。
まずは一つ目の問題。こんな感じかな。
{-- Line型クラス定義 Int:: String:: --} data Line = Line Int String
続いて上記Line型クラスの変数を宣言してprintします。
{-- Line型クラス定義 Int:: String:: --} data Line = Line Int String deriving Show {-- Line型変数定義 --} line :: Line line = Line 50 "This is a Line" main = do print line
そして、Line型のフィールドに名前を付けます。
{-- Line型クラス定義 Int:: String:: --} -- data Line = Line Int String deriving Show data Line = Line {number::Int, string::String} deriving Show {-- Line型変数定義 --} line :: Line line = Line 50 "This is a Line" main = do print line
Warningが出ちゃいますが、ここでは気にせず次に進みます。
次はLine型のリストを作ってprintします。
{-- Line型クラス定義 Int:: String:: --} -- data Line = Line Int String deriving Show data Line = Line {number::Int, string::String} deriving Show {-- Line型変数定義 --} _line :: Line _line = Line 50 "This is a Line" {-- Line型リスト定義 --} _lines :: [Line] _lines = [(Line 10 "This is a Line"), (Line 20 "That is a Line"), (Line 30 "It is a Line")] main = do print _line print _lines
最後にLine型リストを行番号(number)でソートする関数を作ります。
import List {-- Line型クラス定義 Int::行番号 String::行 --} -- data Line = Line Int String deriving Show data Line = Line {number::Int, string::String} deriving Show {-- Line型変数定義 --} _line :: Line _line = Line 50 "This is a Line" {-- Line型リスト定義 --} _lines :: [Line] _lines = [(Line 30 "This is a Line"), (Line 10 "That is a Line"), (Line 20 "It is a Line")] main = do print _line print _lines print $ sortLines _lines {-- sortLines List型の値のリストを行番号でソートする。 --} sortLines :: [Line] -> [Line] sortLines = sortBy (\x y -> (number x) `compare` (number y))
う〜ん、忘れていますね〜。
前を読み読み、ようやく作ることが出来ました。