LoginSignup
1
0

More than 3 years have passed since last update.

Haskell で Functor を使う

Last updated at Posted at 2020-05-12

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_programingfmapを適用したものです。度合いが-50になってしまいました。

今回のプログラムは・・・

今回は、Haskell解説書のFunctorの説明を見てプログラミングしました。
Haskell解説書は、Maybeを例にしていましたが、本に書いてあるとおりにそのまま動かしても仕方ないので、「これができるなら、こんなこともできるんじゃないか?」と考えて、自分なりに作ってみて動かすのが、習得の近道だと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0