1 -- | 2 -- Module : Data.Semiring.Properties 3 -- Copyright : Sebastian Fischer <mailto:mail@sebfisch.de> 4 -- License : BSD3 5 -- 6 -- This library provides properties for the 'Semiring' type class that 7 -- can be checked using libraries like QuickCheck or SmallCheck. 8 -- 9 module Data.Semiring.Properties ( 10 11 module Data.Semiring, module Data.Semiring.Properties 12 13 ) where 14 15 import Data.Semiring 16 17 -- | > a .+. b == b .+. a 18 plus'comm :: Semiring s => s -> s -> Bool 19 plus'comm a b = a .+. b == b .+. a 20 21 -- | > zero .+. a == a 22 left'zero :: Semiring s => s -> Bool 23 left'zero a = zero .+. a == a 24 25 -- | > (a .+. b) .+. c == a .+. (b .+. c) 26 add'assoc :: Semiring s => s -> s -> s -> Bool 27 add'assoc a b c = (a .+. b) .+. c == a .+. (b .+. c) 28 29 -- | > one .*. a == a 30 left'one :: Semiring s => s -> Bool 31 left'one a = one .*. a == a 32 33 -- | > a .*. one == a 34 right'one :: Semiring s => s -> Bool 35 right'one a = a .*. one == a 36 37 -- | > (a .*. b) .*. c == a .*. (b .*. c) 38 mul'assoc :: Semiring s => s -> s -> s -> Bool 39 mul'assoc a b c = (a .*. b) .*. c == a .*. (b .*. c) 40 41 -- | > a .*. (b .+. c) == (a .*. b) .+. (a .*. c) 42 left'distr :: Semiring s => s -> s -> s -> Bool 43 left'distr a b c = a .*. (b .+. c) == (a .*. b) .+. (a .*. c) 44 45 -- | > (a .+. b) .*. c == (a .*. c) .+. (b .*. c) 46 right'distr :: Semiring s => s -> s -> s -> Bool 47 right'distr a b c = (a .+. b) .*. c == (a .*. c) .+. (b .*. c) 48 49 -- | > zero .*. a == zero 50 left'ann :: Semiring s => s -> Bool 51 left'ann a = zero .*. a == zero 52 53 -- | > a .*. zero == zero 54 right'ann :: Semiring s => s -> Bool 55 right'ann a = a .*. zero == zero