型と型クラス

9.5 本章のまとめ


なるほど、たしかにHaskellの型クラスはJavaインターフェイスに似ていますね。
では練習問題に進みます。

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))


う〜ん、忘れていますね〜。
前を読み読み、ようやく作ることが出来ました。