11module Control.Lens.Grammar.Boole
22 ( BooleanAlgebra (.. )
3- , fromBool , andB , orB , allB , anyB
3+ , andB , orB , allB , anyB
44 , TokenTest (.. )
55 , TokenAlgebra (.. )
66 ) where
@@ -18,15 +18,10 @@ import GHC.Generics
1818
1919class BooleanAlgebra b where
2020
21- failB :: b
22- default failB
23- :: (b ~ f bool , BooleanAlgebra bool , Applicative f ) => b
24- failB = pure failB
25-
26- passB :: b
27- default passB
28- :: (b ~ f bool , BooleanAlgebra bool , Applicative f ) => b
29- passB = pure passB
21+ fromBool :: Bool -> b
22+ default fromBool
23+ :: (b ~ f bool , BooleanAlgebra bool , Applicative f ) => Bool -> b
24+ fromBool = pure . fromBool
3025
3126 notB :: b -> b
3227 default notB
@@ -43,22 +38,17 @@ class BooleanAlgebra b where
4338 :: (b ~ f bool , BooleanAlgebra bool , Applicative f ) => b -> b -> b
4439 (>&&<) = liftA2 (>&&<)
4540
46- fromBool :: BooleanAlgebra b => Bool -> b
47- fromBool = \ case
48- True -> passB
49- False -> failB
50-
5141andB :: (Foldable f , BooleanAlgebra b ) => f b -> b
52- andB = foldl' (>&&<) passB
42+ andB = foldl' (>&&<) (fromBool True )
5343
5444orB :: (Foldable f , BooleanAlgebra b ) => f b -> b
55- orB = foldl' (>||<) failB
45+ orB = foldl' (>||<) (fromBool False )
5646
5747allB :: (Foldable f , BooleanAlgebra b ) => (a -> b ) -> f a -> b
58- allB f = foldl' (\ b a -> b >&&< f a) passB
48+ allB f = foldl' (\ b a -> b >&&< f a) (fromBool True )
5949
6050anyB :: (Foldable f , BooleanAlgebra b ) => (a -> b ) -> f a -> b
61- anyB f = foldl' (\ b a -> b >||< f a) failB
51+ anyB f = foldl' (\ b a -> b >||< f a) (fromBool False )
6252
6353newtype TokenTest token = TokenTest (RegExam token (TokenTest token ))
6454
@@ -89,8 +79,7 @@ deriving stock instance
8979 (Categorized token , Show token , Show (Categorize token ))
9080 => Show (TokenTest token )
9181instance BooleanAlgebra Bool where
92- failB = False
93- passB = True
82+ fromBool = id
9483 notB = not
9584 (>&&<) = (&&)
9685 (>||<) = (||)
@@ -113,8 +102,9 @@ instance Categorized token
113102 RegExam (Alternate (tokenClass exam1) (tokenClass exam2))
114103instance Categorized token
115104 => BooleanAlgebra (RegExam token (TokenTest token )) where
116- failB = Fail
117- passB = Pass
105+ fromBool = \ case
106+ False -> Fail
107+ True -> Pass
118108 notB Fail = Pass
119109 notB Pass = Fail
120110 notB (Alternate (TokenTest x) (TokenTest y)) = x >&&< y
0 commit comments