計算機科学のブログ

型によるプログラミング 合成によるデザイン: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]]]
%