Help us understand the problem. What is going on with this article?

Haskell で Functor を使う

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を例にしていましたが、本に書いてあるとおりにそのまま動かしても仕方ないので、「これができるなら、こんなこともできるんじゃないか?」と考えて、自分なりに作ってみて動かすのが、習得の近道だと思います。

oskats1987
現在C#、F#、Python、Haskell、ディープラーニングを勉強中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした