HeskellでFunctorを使って簡単なプログラムを動かしてみました
Functorを使ってプログラムを動かすのは初めてです。
今回は簡単なプログラムを作ってみました。
haskell.hs
data Haskell a= Shit a | Easy a | Difficult a | Demon a
instance Functor Haskell where
fmap func (Shit n) = Shit (func n)
fmap func (Easy n) = Easy (func n)
fmap func (Difficult n) = Difficult (func n)
fmap func (Demon n) = Demon (func n)
main::IO()
main = do
let haskell_programing = Difficult 100
let haskell = fmap ((-) 50) haskell_programing
let a = (\(Difficult n) -> n) haskell
print a
実行結果は
-50
プログラム解説
data Haskell a= Shit a | Easy a | Difficult a | Demon a
ここでは、型コンストラクタを定義しています。
Haskell
型は、Haskellの難しさと、その度合いを表しています。
Haskellの難しさは、データコンストラクタにより、
Shit
糞みたいに簡単、Easy
簡単、Difficult
難しい、Demon
悪魔のように難しい、に分類されます。
instance Functor Haskell where
fmap func (Shit n) = Shit (func n)
fmap func (Easy n) = Easy (func n)
fmap func (Difficult n) = Difficult (func n)
fmap func (Demon n) = Demon (func n)
インスタンスを定義しています。
fmap
のよくある定義の仕方です。
main::IO()
main = do
let haskell_programing = Difficult 100
let haskell = fmap ((-) 50) haskell_programing
let a = (\(Difficult n) -> n) haskell
print a
メイン関数です。
haskell_programing
は、難しい、その度合いは100と、定義されています。
haskell
は、haskell_programing
にfmap
を適用したものです。度合いが-50になってしまいました。
今回のプログラムは・・・
今回は、Haskell解説書のFunctorの説明を見てプログラミングしました。
Haskell解説書は、Maybeを例にしていましたが、本に書いてあるとおりにそのまま動かしても仕方ないので、「これができるなら、こんなこともできるんじゃないか?」と考えて、自分なりに作ってみて動かすのが、習得の近道だと思います。