Advertisement
Guest User

Untitled

a guest
Aug 24th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. ---
  2. title: Haskellがオブジェクト指向型言語じゃないとか思ったりしてますか!? 1
  3. tags: Haskell
  4. ---
  5. # Haskellがオブジェクト指向言語じゃないとか思ったりしてますか!? 1
  6.  タイトルは完全に煽りで、Haskellがオブジェクト指向型言語であるかというと多くの議論を呼ぶでしょうが
  7. ここでHaskellの(身勝手な)啓蒙活動の1つとして、一般的なオブジェクト指向型言語と同じことを表せるといった例を示します。
  8. (この「表す」というのは意味論を意図していません)
  9.  
  10. ## 今日のOOP-Haskell
  11.  オブジェクト指向三大概念のうち一つの継承が、Haskellでも表せます。
  12. 継承の最も人気な例であるアニマルや犬、猫を純粋関数型で表すには少々面倒ですので、
  13. 半群、モノイド、群を例とします。
  14.  
  15. ```haskell
  16. class Semigroup a where
  17. -- 二項演算
  18. append :: a -> a -> a
  19.  
  20. class (Semigroup a) => Monoid' a where
  21. -- 単位元
  22. empty :: a
  23.  
  24. class (Monoid' a) => Group a where
  25. -- 逆元を取る演算
  26. inverse :: a -> a
  27.  
  28. instance Semigroup Int where
  29. x `append` y = x + y
  30.  
  31. instance Monoid' Int where
  32. empty = 0
  33.  
  34. instance Group Int where
  35. inverse x = negate x
  36.  
  37. main :: IO ()
  38. main = do
  39. print (1 `append` 2 :: Int)
  40. print (empty `append` 10 :: Int)
  41. print (inverse 20 :: Int)
  42. ```
  43.  
  44. 出力
  45. ```
  46. 3
  47. 10
  48. -20
  49. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement