型によるプログラミング 合成によるデザイン:SemigroupとMonoid Semigroup:似ている型を組み合わせる <>演算子、Integer、+演算子、結合律
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 17(合成によるデザイン:SemigroupとMonoid)、17.2(Semigroup:似ている型を組み合わせる)、クイックチェック 17-3の解答を求めてみる。
Integer型の和は結合律を満たすので、結合律をサポートする。
コード
lesson/app/Main.hs
module Main where
import Lib
ns = [-4 .. 5]
main :: IO ()
main = do
print $
map
( \a ->
map
( \b ->
map
(\c -> (a + b) + c == a + (b + c))
ns
)
ns
)
ns
lesson/src/Lib.hs
module Lib where
import Data.Semigroup
instance Semigroup Int where
(<>) x y = x / y
入出力結果(Terminal, Zsh)
% stack runghc app/Main.hs
[[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]],[[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True],[True,True,True,True,True,True,True,True,True,True]]]
%