#Haskellで「初めての型クラス」
Haskellの型クラスのことがよく分からなかったので、とりあえず、適当に作って動かしてみました。
分からなければ、実際に作り、動かす!
#Haskellの型クラスを用いたプログラム
data Book = Dic | Novel | Comi | Note
data Fun = Toobad | Bad | Usual | Good | Verygood
data Pages = Pages Book Int
isfun :: Book -> Fun
isfun Dic = Toobad
isfun Novel = Toobad
isfun Comi = Verygood
isfun Note = Usual
fun_tostring :: Fun -> String
fun_tostring x =
case x of
Toobad -> "Too Bad!!"
Bad -> "Bad!"
Usual -> "Usual..."
Good -> "Good.."
Verygood -> "Very Good!!"
class Haskell a where
fun :: a -> Int
difficult :: a -> Int
instance Haskell Pages where
fun _ = 100
difficult _ = 10000
f b = fun b
main::IO()
main = do
let haskell_book = Pages Dic 600
let fun=fun_tostring(isfun ((\(Pages book page) -> book) haskell_book))
print fun
let page=((\(Pages book page) -> page) haskell_book)
print page
let h = f haskell_book
print h
実行結果は
"Too Bad!!"
600
100
##解説
Book
は、本の種類を定義してます。
Fun
は、面白さ、Pages
は、ページ数を定義します。
関数isfun
は、Book
型を取りFun
型を返します。
fun_tostring
は、Fun
型を取り、それに応じたString
を返します。
クラスHaskell
は、関数fun
とdifficult
を持ち、Int
型を返します。
クラスHaskell
のインスタンスは、相当手を抜いており、単純に決まった数値を返します。
###main関数内
main関数内の解説をします。
let haskell_book = Pages Dic 600
haskell_book
は、600ページある辞書であると、定義しています。
let fun=fun_tostring(isfun ((\(Pages book page) -> book) haskell_book))
print fun
ラムダ関数により、haskell_book
から本の種類を取り出し、isfun
関数によりその本の種類の面白さを調べます。
fun_tostring
関数により、面白さに応じたString
型を取得します。
それをprint
します。(実行結果1行目)
let page=((\(Pages book page) -> page) haskell_book)
print page
haskell_book
から、ページ数を取り出し、print
します。(実行結果2行目)
let h = f haskell_book
print h
関数f
に、haskell_book
を渡し、関数fun
を実行してます。(実行結果3行目)
##今回の型クラスいじりで知ったこと
今回、Haskellの型クラスを知るために、いろいろいじってみました。
知ったことと言っても、型クラスの使い方くらいです。