Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---
- title: Haskellがオブジェクト指向型言語じゃないとか思ったりしてますか!? 1
- tags: Haskell
- ---
- # Haskellがオブジェクト指向言語じゃないとか思ったりしてますか!? 1
- タイトルは完全に煽りで、Haskellがオブジェクト指向型言語であるかというと多くの議論を呼ぶでしょうが
- ここでHaskellの(身勝手な)啓蒙活動の1つとして、一般的なオブジェクト指向型言語と同じことを表せるといった例を示します。
- (この「表す」というのは意味論を意図していません)
- ## 今日のOOP-Haskell
- オブジェクト指向三大概念のうち一つの継承が、Haskellでも表せます。
- 継承の最も人気な例であるアニマルや犬、猫を純粋関数型で表すには少々面倒ですので、
- 半群、モノイド、群を例とします。
- ```haskell
- class Semigroup a where
- -- 二項演算
- append :: a -> a -> a
- class (Semigroup a) => Monoid' a where
- -- 単位元
- empty :: a
- class (Monoid' a) => Group a where
- -- 逆元を取る演算
- inverse :: a -> a
- instance Semigroup Int where
- x `append` y = x + y
- instance Monoid' Int where
- empty = 0
- instance Group Int where
- inverse x = negate x
- main :: IO ()
- main = do
- print (1 `append` 2 :: Int)
- print (empty `append` 10 :: Int)
- print (inverse 20 :: Int)
- ```
- 出力
- ```
- 3
- 10
- -20
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement