@@ -1,15 +1,16 @@
1{-# LANGUAGE DeriveFunctor #-}
2{-# LANGUAGE DeriveFunctor #-}
2{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4{-# LANGUAGE LambdaCase #-}
5{-# LANGUAGE LambdaCase #-}
5{-# LANGUAGE RankNTypes #-}
6{-# LANGUAGE RankNTypes #-}
7+{-# LANGUAGE StandaloneDeriving #-}
6{-# LANGUAGE TypeFamilies #-}
8{-# LANGUAGE TypeFamilies #-}
7{-# LANGUAGE UndecidableInstances #-}
9{-# LANGUAGE UndecidableInstances #-}
9import Control.Lens
11import Control.Lens
10import Control.Monad.Fix
12import Control.Monad.Fix
11import Data.Align
13import Data.Align
12−import Data.AppendMap () -- for the Align instance
13import qualified Data.AppendMap as AMap
14import qualified Data.AppendMap as AMap
14import Data.Functor.Misc
15import Data.Functor.Misc
15import Data.Map (Map)
16import Data.Map (Map)
@@ -36,6 +37,10 @@ instance (Ord k, Query a, Eq (QueryResult a), Align (MonoidalMap k)) => Query (S
36newtype Selector k a = Selector { unSelector :: MonoidalMap k a }
37newtype Selector k a = Selector { unSelector :: MonoidalMap k a }
37 deriving (Show, Read, Eq, Ord, Functor)
38 deriving (Show, Read, Eq, Ord, Functor)
40+#if !(MIN_VERSION_monoidal_containers(0,4,1))
41+deriving instance Ord k => Align (MonoidalMap k)
39instance (Ord k, Eq a, Monoid a, Align (MonoidalMap k)) => Semigroup (Selector k a) where
44instance (Ord k, Eq a, Monoid a, Align (MonoidalMap k)) => Semigroup (Selector k a) where
40 (Selector a) <> (Selector b) = Selector $ fmapMaybe id $ f a b
45 (Selector a) <> (Selector b) = Selector $ fmapMaybe id $ f a b