型によるプログラミング 合成によるデザイン:SemigroupとMonoid Semigroup:似ている型を組み合わせる <>演算子
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 17(合成によるデザイン:SemigroupとMonoid)、17.2(Semigroup:似ている型を組み合わせる)、クイックチェック 17-2の解答を求めてみる。
可能ではない。
Int型とInt型の除算の結果がInt型になるとは限らないから。例えば 2/1、4/2等は2、2とInt型になるけど、2/3、4/3はInt型にならない。
実際に確認。
コード
lesson/app/Main.hs
module Main where
import Lib
main :: IO ()
main = return ()
lesson/src/Lib.hs
module Lib where
import Data.Semigroup
instance Semigroup Int where
(<>) x y = x / y
入出力結果(Terminal, Zsh)
% stack build
lesson-0.1.0.0: unregistering (local file changes: src/Lib.hs)
lesson> build (lib + exe)
Preprocessing library for lesson-0.1.0.0..
Building library for lesson-0.1.0.0..
[2 of 2] Compiling Lib
/Users/…/lesson/src/Lib.hs:6:16: error:
• No instance for (Fractional Int) arising from a use of ‘/’
• In the expression: x / y
In an equation for ‘<>’: (<>) x y = x / y
In the instance declaration for ‘Semigroup Int’
|
6 | (<>) x y = x / y
| ^
-- While building package lesson-0.1.0.0 (scroll up to its section to see the error) using:
/Users/…/.stack/setup-exe-cache/x86_64-osx/Cabal-simple_mPHDZzAJ_3.4.1.0_ghc-9.0.2 --builddir=.stack-work/dist/x86_64-osx/Cabal-3.4.1.0 build lib:lesson exe:lesson-exe --ghc-options " -fdiagnostics-color=always"
Process exited with code: ExitFailure 1
%