bowtie 0.7.0 → 0.8.0
raw patch · 5 files changed
+33/−6 lines, 5 filesdep +hashabledep ~some
Dependencies added: hashable
Dependency ranges changed: some
Files
- bowtie.cabal +4/−3
- src/Bowtie/Anno.hs +6/−1
- src/Bowtie/Jot.hs +4/−1
- src/Bowtie/Memo.hs +4/−1
- src/Bowtie/SMap.hs +15/−0
bowtie.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.38.0.+-- This file has been generated from package.yaml by hpack version 0.39.1. -- -- see: https://github.com/sol/hpack name: bowtie-version: 0.7.0+version: 0.8.0 synopsis: Tying knots in polynomial functors description: Please see the README on GitHub at <https://github.com/ejconlon/bowtie#readme> homepage: https://github.com/ejconlon/bowtie#readme@@ -73,11 +73,12 @@ , bifunctors ==5.6.* , comonad ==5.0.* , dependent-map ==0.4.*+ , hashable >=1.4 && <1.6 , mtl ==2.3.* , nonempty-containers ==0.3.* , optics ==0.4.* , prettyprinter ==1.7.* , recursion-schemes ==5.2.* , semigroupoids ==6.0.*- , some ==1.0.*+ , some ==1.1.* default-language: GHC2021
src/Bowtie/Anno.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DeriveAnyClass #-}+ module Bowtie.Anno ( Anno (..) , annoUnit@@ -11,6 +13,8 @@ ) where +import Data.Hashable (Hashable)+import GHC.Generics (Generic) import Control.Comonad (Comonad (..)) import Control.Exception (Exception) import Control.Monad.Reader (Reader, ReaderT (..), runReader)@@ -27,7 +31,8 @@ -- | An "annotation" with associated value. type Anno :: Type -> Type -> Type data Anno k v = Anno {annoKey :: !k, annoVal :: !v}- deriving stock (Eq, Ord, Show, Functor, Foldable, Traversable)+ deriving stock (Eq, Ord, Show, Functor, Foldable, Traversable, Generic)+ deriving anyclass (Hashable) instance Bifunctor Anno where bimap f g (Anno k v) = Anno (f k) (g v)
src/Bowtie/Jot.hs view
@@ -25,6 +25,7 @@ import Data.Bifoldable (Bifoldable (..)) import Data.Bifunctor (Bifunctor (..)) import Data.Bitraversable (Bitraversable (..))+import Data.Hashable (Hashable) import Data.Kind (Type) import Data.String (IsString (..)) import Prettyprinter (Pretty (..))@@ -32,7 +33,7 @@ -- | The base functor for a 'Jot' newtype JotF g k a r = JotF {unJotF :: Anno k (g a r)} deriving stock (Show, Functor)- deriving newtype (Eq, Ord)+ deriving newtype (Eq, Ord, Hashable) pattern JotFP :: k -> g a r -> JotF g k a r pattern JotFP k v = JotF (Anno k v)@@ -72,6 +73,8 @@ deriving newtype instance (Ord k, Ord (g a (Jot g k a))) => Ord (Jot g k a) deriving stock instance (Show k, Show (g a (Jot g k a))) => Show (Jot g k a)++deriving newtype instance (Hashable k, Hashable (g a (Jot g k a))) => Hashable (Jot g k a) deriving newtype instance (Monoid k, IsString (g a (Jot g k a))) => IsString (Jot g k a)
src/Bowtie/Memo.hs view
@@ -24,6 +24,7 @@ where import Bowtie.Anno (Anno (..), annoRight, annoRightM)+import Data.Hashable (Hashable) import Bowtie.Fix (Fix) import Bowtie.Foldable (cataM) import Control.Monad.Reader (Reader, ReaderT (..), runReader)@@ -36,7 +37,7 @@ -- | The base functor for a 'Memo' newtype MemoF f k r = MemoF {unMemoF :: Anno k (f r)} deriving stock (Show, Functor, Foldable, Traversable)- deriving newtype (Eq, Ord)+ deriving newtype (Eq, Ord, Hashable) pattern MemoFP :: k -> f r -> MemoF f k r pattern MemoFP k v = MemoF (Anno k v)@@ -72,6 +73,8 @@ deriving newtype instance (Eq k, Eq (f (Memo f k))) => Eq (Memo f k) deriving newtype instance (Ord k, Ord (f (Memo f k))) => Ord (Memo f k)++deriving newtype instance (Hashable k, Hashable (f (Memo f k))) => Hashable (Memo f k) deriving stock instance (Show k, Show (f (Memo f k))) => Show (Memo f k)
src/Bowtie/SMap.hs view
@@ -37,9 +37,11 @@ import Data.Coerce (coerce) import Data.Dependent.Map (DMap) import Data.Dependent.Map qualified as DMap+import Data.EqP (EqP (..)) import Data.Functor.Identity (Identity (..)) import Data.GADT.Compare (GCompare (..), GEq (..), GOrdering (..), defaultCompare, defaultEq) import Data.Kind (Type)+import Data.OrdP (OrdP (..)) import Data.Proxy (Proxy (..)) import Data.Some (Some (..)) import Data.Type.Bool (type (||))@@ -59,6 +61,12 @@ geq (Key ps1 _) (Key ps2 _) = fmap (\Refl -> Refl) (sameSymbol ps1 ps2) +instance EqP (Key d) where+ eqp (Key ps1 _) (Key ps2 _) =+ case sameSymbol ps1 ps2 of+ Just Refl -> True+ Nothing -> False+ instance Eq (Key d v) where (==) = defaultEq @@ -68,6 +76,13 @@ LTI -> GLT EQI -> GEQ GTI -> GGT++instance OrdP (Key d) where+ comparep (Key ps1 _) (Key ps2 _) =+ case cmpSymbol ps1 ps2 of+ LTI -> LT+ EQI -> EQ+ GTI -> GT instance Ord (Key d v) where compare = defaultCompare