@@ -28,14 +28,14 @@ instance Query MyQuery where
28 type QueryResult MyQuery = ()
28 type QueryResult MyQuery = ()
29 crop _ _ = ()
29 crop _ _ = ()
31−instance (Ord k, Query a, Eq (QueryResult a)) => Query (Selector k a) where
31+instance (Ord k, Query a, Eq (QueryResult a), Align (MonoidalMap k)) => Query (Selector k a) where
32 type QueryResult (Selector k a) = Selector k (QueryResult a)
32 type QueryResult (Selector k a) = Selector k (QueryResult a)
33 crop q r = undefined
33 crop q r = undefined
35newtype Selector k a = Selector { unSelector :: MonoidalMap k a }
35newtype Selector k a = Selector { unSelector :: MonoidalMap k a }
36 deriving (Show, Read, Eq, Ord, Functor)
36 deriving (Show, Read, Eq, Ord, Functor)
38−instance (Ord k, Eq a, Monoid a) => Semigroup (Selector k a) where
38+instance (Ord k, Eq a, Monoid a, Align (MonoidalMap k)) => Semigroup (Selector k a) where
39 (Selector a) <> (Selector b) = Selector $ fmapMaybe id $ f a b
39 (Selector a) <> (Selector b) = Selector $ fmapMaybe id $ f a b
41 f = alignWith $ \case
41 f = alignWith $ \case
@@ -45,14 +45,14 @@ instance (Ord k, Eq a, Monoid a) => Semigroup (Selector k a) where
45 let z = x `mappend` y
45 let z = x `mappend` y
46 in if z == mempty then Nothing else Just z
46 in if z == mempty then Nothing else Just z
48−instance (Ord k, Eq a, Monoid a) => Monoid (Selector k a) where
48+instance (Ord k, Eq a, Monoid a, Align (MonoidalMap k)) => Monoid (Selector k a) where
49 mempty = Selector AMap.empty
49 mempty = Selector AMap.empty
50 mappend = (<>)
50 mappend = (<>)
52−instance (Eq a, Ord k, Group a) => Group (Selector k a) where
52+instance (Eq a, Ord k, Group a, Align (MonoidalMap k)) => Group (Selector k a) where
53 negateG = fmap negateG
53 negateG = fmap negateG
55−instance (Eq a, Ord k, Group a) => Additive (Selector k a)
55+instance (Eq a, Ord k, Group a, Align (MonoidalMap k)) => Additive (Selector k a)
57main :: IO ()
57main :: IO ()