packages feed

fraxl 0.2.0.1 → 0.3.0.0

raw patch · 4 files changed

+39/−66 lines, 4 filesdep +fastsumdep −vinylPVP ok

version bump matches the API change (PVP)

Dependencies added: fastsum

Dependencies removed: vinyl

API changes (from Hackage documentation)

- Control.Monad.Fraxl.Class: instance (GHC.Base.Monad m, f Data.Vinyl.Lens.∈ r) => Control.Monad.Fraxl.Class.MonadFraxl f (Control.Monad.Trans.Fraxl.Fraxl r m)
- Control.Monad.Trans.Fraxl: Flap :: (f a) -> Flap a f
- Control.Monad.Trans.Fraxl: instance forall a (t :: a) (ts :: [a]) (i :: Data.Vinyl.TypeLevel.Nat) (s :: a). (Control.Monad.Trans.Fraxl.FMatch1 t ts i, Data.Vinyl.TypeLevel.RIndex t (s : ts) ~ 'Data.Vinyl.TypeLevel.S i, Data.Vinyl.TypeLevel.RDelete t (s : ts) ~ (s : Data.Vinyl.TypeLevel.RDelete t ts)) => Control.Monad.Trans.Fraxl.FMatch1 t (s : ts) ('Data.Vinyl.TypeLevel.S i)
- Control.Monad.Trans.Fraxl: instance forall a (t :: a) (ts :: [a]). Control.Monad.Trans.Fraxl.FMatch1 t (t : ts) 'Data.Vinyl.TypeLevel.Z
- Control.Monad.Trans.Fraxl: instance forall k (r :: [k -> *]) (f :: k -> *). (Data.Vinyl.Core.RecApplicative r, Data.Vinyl.CoRec.FoldRec r r, Data.GADT.Compare.GCompare f, Data.GADT.Compare.GCompare (Control.Monad.Trans.Fraxl.Union r)) => Data.GADT.Compare.GCompare (Control.Monad.Trans.Fraxl.Union (f : r))
- Control.Monad.Trans.Fraxl: instance forall k (r :: [k -> *]) (f :: k -> *). (Data.Vinyl.Core.RecApplicative r, Data.Vinyl.CoRec.FoldRec r r, Data.GADT.Compare.GEq f, Data.GADT.Compare.GEq (Control.Monad.Trans.Fraxl.Union r)) => Data.GADT.Compare.GEq (Control.Monad.Trans.Fraxl.Union (f : r))
- Control.Monad.Trans.Fraxl: newtype Flap a f
+ Control.Monad.Fraxl.Class: instance (GHC.Base.Monad m, GHC.TypeNats.KnownNat (Data.Sum.ElemIndex f r)) => Control.Monad.Fraxl.Class.MonadFraxl f (Control.Monad.Trans.Fraxl.Fraxl r m)
+ Control.Monad.Trans.Fraxl: instance (Data.GADT.Compare.GCompare f, Data.GADT.Compare.GCompare (Control.Monad.Trans.Fraxl.Union r)) => Data.GADT.Compare.GCompare (Control.Monad.Trans.Fraxl.Union (f : r))
+ Control.Monad.Trans.Fraxl: instance (Data.GADT.Compare.GEq f, Data.GADT.Compare.GEq (Control.Monad.Trans.Fraxl.Union r)) => Data.GADT.Compare.GEq (Control.Monad.Trans.Fraxl.Union (f : r))
- Control.Monad.Fraxl: (|:|) :: forall f r a m. (Monad m, RecApplicative r, FoldRec r r) => (forall a'. Fetch f m a') -> (forall a'. Fetch (Union r) m a') -> Fetch (Union (f : r)) m a
+ Control.Monad.Fraxl: (|:|) :: forall f r a m. Monad m => (forall a'. Fetch f m a') -> (forall a'. Fetch (Union r) m a') -> Fetch (Union (f : r)) m a
- Control.Monad.Fraxl: CachedFetch :: (f a) -> CachedFetch f a
+ Control.Monad.Fraxl: CachedFetch :: f a -> CachedFetch f a
- Control.Monad.Fraxl: [ACons] :: ASeq f (a1, u)
+ Control.Monad.Fraxl: [ACons] :: forall (f :: Type -> Type) a a1 u. () => f a1 -> ASeq f u -> ASeq f (a1, u)
- Control.Monad.Fraxl: [ANil] :: ASeq f ()
+ Control.Monad.Fraxl: [ANil] :: forall (f :: Type -> Type) a. () => ASeq f ()
- Control.Monad.Fraxl: data ASeq (f :: * -> *) a
+ Control.Monad.Fraxl: data ASeq (f :: Type -> Type) a
- Control.Monad.Fraxl: hoistASeq :: () => forall x. () => f x -> g x -> ASeq f a -> ASeq g a
+ Control.Monad.Fraxl: hoistASeq :: () => (forall x. () => f x -> g x) -> ASeq f a -> ASeq g a
- Control.Monad.Fraxl: rebaseASeq :: () => ASeq f u -> forall x. () => x -> y -> ASeq f x -> z -> v -> u -> y -> ASeq f v -> z
+ Control.Monad.Fraxl: rebaseASeq :: () => ASeq f u -> (forall x. () => (x -> y) -> ASeq f x -> z) -> (v -> u -> y) -> ASeq f v -> z
- Control.Monad.Fraxl: traverseASeq :: Applicative h => forall x. () => f x -> h g x -> ASeq f a -> h ASeq g a
+ Control.Monad.Fraxl: traverseASeq :: Applicative h => (forall x. () => f x -> h (g x)) -> ASeq f a -> h (ASeq g a)
- Control.Monad.Trans.Fraxl: (|:|) :: forall f r a m. (Monad m, RecApplicative r, FoldRec r r) => (forall a'. Fetch f m a') -> (forall a'. Fetch (Union r) m a') -> Fetch (Union (f : r)) m a
+ Control.Monad.Trans.Fraxl: (|:|) :: forall f r a m. Monad m => (forall a'. Fetch f m a') -> (forall a'. Fetch (Union r) m a') -> Fetch (Union (f : r)) m a
- Control.Monad.Trans.Fraxl: CachedFetch :: (f a) -> CachedFetch f a
+ Control.Monad.Trans.Fraxl: CachedFetch :: f a -> CachedFetch f a
- Control.Monad.Trans.Fraxl: Union :: (CoRec (Flap a) r) -> Union r a
+ Control.Monad.Trans.Fraxl: Union :: Sum ts f -> Union ts f
- Control.Monad.Trans.Fraxl: [ACons] :: ASeq f (a1, u)
+ Control.Monad.Trans.Fraxl: [ACons] :: forall (f :: Type -> Type) a a1 u. () => f a1 -> ASeq f u -> ASeq f (a1, u)
- Control.Monad.Trans.Fraxl: [ANil] :: ASeq f ()
+ Control.Monad.Trans.Fraxl: [ANil] :: forall (f :: Type -> Type) a. () => ASeq f ()
- Control.Monad.Trans.Fraxl: data ASeq (f :: * -> *) a
+ Control.Monad.Trans.Fraxl: data ASeq (f :: Type -> Type) a
- Control.Monad.Trans.Fraxl: hoistASeq :: () => forall x. () => f x -> g x -> ASeq f a -> ASeq g a
+ Control.Monad.Trans.Fraxl: hoistASeq :: () => (forall x. () => f x -> g x) -> ASeq f a -> ASeq g a
- Control.Monad.Trans.Fraxl: newtype Union r a
+ Control.Monad.Trans.Fraxl: newtype Union ts f
- Control.Monad.Trans.Fraxl: rebaseASeq :: () => ASeq f u -> forall x. () => x -> y -> ASeq f x -> z -> v -> u -> y -> ASeq f v -> z
+ Control.Monad.Trans.Fraxl: rebaseASeq :: () => ASeq f u -> (forall x. () => (x -> y) -> ASeq f x -> z) -> (v -> u -> y) -> ASeq f v -> z
- Control.Monad.Trans.Fraxl: traverseASeq :: Applicative h => forall x. () => f x -> h g x -> ASeq f a -> h ASeq g a
+ Control.Monad.Trans.Fraxl: traverseASeq :: Applicative h => (forall x. () => f x -> h (g x)) -> ASeq f a -> h (ASeq g a)
- Control.Monad.Trans.Fraxl: unconsCoRec :: (RecApplicative ts, FoldRec ts ts) => CoRec f (t : ts) -> Either (f t) (CoRec f ts)
+ Control.Monad.Trans.Fraxl: unconsCoRec :: Sum (t : ts) f -> Either (t f) (Sum ts f)
- Control.Monad.Trans.Fraxl.Free: class Monad m => MonadFree (f :: * -> *) (m :: * -> *) | m -> f
+ Control.Monad.Trans.Fraxl.Free: class Monad m => MonadFree (f :: Type -> Type) (m :: Type -> Type) | m -> f
- Control.Monad.Trans.Fraxl.Free: wrap :: MonadFree f m => f m a -> m a
+ Control.Monad.Trans.Fraxl.Free: wrap :: MonadFree f m => f (m a) -> m a

Files

+ CHANGELOG.md view
@@ -0,0 +1,3 @@+0.3.0.0 [2019.02.07]+--+Switched from vinyl to fastsum
fraxl.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: fraxl-version: 0.2.0.1+version: 0.3.0.0 license: BSD3 license-file: LICENSE copyright: 2016 Will Fancher@@ -14,6 +14,7 @@ build-type: Simple extra-source-files:     README.md+    CHANGELOG.md  source-repository head     type: git@@ -42,8 +43,8 @@         mtl >=2.2.2 && <2.3,         dependent-sum ==0.4.*,         dependent-map >=0.2.4.0 && <0.3,-        vinyl >=0.6 && <0.9,-        type-aligned >=0.9.6 && <0.10+        type-aligned >=0.9.6 && <0.10,+        fastsum >=0.1.0.0 && <0.2  executable examples     main-is: Main.hs@@ -52,7 +53,6 @@     ghc-options: -Wall      if flag(install-examples)-        buildable: True         build-depends:             base -any,             fraxl -any,
src/Control/Monad/Fraxl/Class.hs view
@@ -35,8 +35,8 @@                                                as Lazy import qualified Control.Monad.Trans.Writer.Strict                                                as Strict-import           Data.Vinyl-import           Data.Vinyl.CoRec+import qualified Data.Sum  as Sum+import           GHC.TypeNats  -- | Class for Fraxl-capable monads. class Monad m => MonadFraxl f m where@@ -45,8 +45,8 @@   default dataFetch :: (MonadTrans t, MonadFraxl f n, t n ~ m) => f a -> m a   dataFetch = lift . dataFetch -instance (Monad m, f ∈ r) => MonadFraxl f (Fraxl r m) where-  dataFetch = liftF . liftAp . Union . CoRec . Flap+instance (Monad m, KnownNat (Sum.ElemIndex f r)) => MonadFraxl f (Fraxl r m) where+  dataFetch = liftF . liftAp . Union . Sum.inject  instance Monad m => MonadFraxl f (FreerT f m) where   dataFetch = liftF . liftAp
src/Control/Monad/Trans/Fraxl.hs view
@@ -1,14 +1,14 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE DataKinds             #-}+{-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE GADTs                 #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE PolyKinds             #-}+{-# LANGUAGE RankNTypes            #-}+{-# LANGUAGE ScopedTypeVariables   #-}+{-# LANGUAGE TupleSections         #-}+{-# LANGUAGE TypeOperators         #-}+{-# LANGUAGE UndecidableInstances  #-}  module Control.Monad.Trans.Fraxl   (@@ -37,7 +37,6 @@   -- * Union   , Union(..)   , unconsCoRec-  , Flap(..)   ) where  import           Control.Applicative.Free.Fast@@ -48,14 +47,10 @@ import           Control.Monad.IO.Class import           Control.Monad.State import           Control.Monad.Trans.Fraxl.Free-import           Data.Dependent.Map (DMap)-import qualified Data.Dependent.Map as DMap+import           Data.Dependent.Map             (DMap)+import qualified Data.Dependent.Map             as DMap import           Data.GADT.Compare-import           Data.Maybe (fromJust)-import           Data.Vinyl-import           Data.Vinyl.CoRec-import           Data.Vinyl.Functor (Compose(..), (:.))-import           Data.Vinyl.TypeLevel+import           Data.Sum  -- | Fraxl is based on a particular Freer monad. -- This Freer monad has applicative optimization,@@ -78,7 +73,7 @@ fetchNil _ = error "Not possible - empty union"  -- | Like '(:)' for constructing @Fetch (Union (f ': r))@-(|:|) :: forall f r a m. (Monad m, RecApplicative r, FoldRec r r)+(|:|) :: forall f r a m. (Monad m)        => (forall a'. Fetch f m a')        -> (forall a'. Fetch (Union r) m a')        -> Fetch (Union (f ': r)) m a@@ -89,7 +84,7 @@            -> m (ASeq m x, ASeq m y, ASeq m z)   runUnion flist ulist ANil = (, , ANil) <$> fetch flist <*> fetchU ulist   runUnion flist ulist (ACons (Union u) us) = case unconsCoRec u of-    Left (Flap fa) -> fmap+    Left fa -> fmap       (\(ACons ma ms, other, rest) -> (ms, other, ACons ma rest))       (runUnion (ACons fa flist) ulist us)     Right u' -> fmap@@ -180,55 +175,30 @@                    => (forall a'. Fetch f m a') -> FreerT f m a -> m a evalCachedFraxl fetch a = fst <$> runCachedFraxl fetch a DMap.empty -class RIndex t ts ~ i => FMatch1 t ts i where-  fmatch1' :: Handler r (f t) -> Rec (Maybe :. f) ts -> Either r (Rec (Maybe :. f) (RDelete t ts))+unconsCoRec :: Sum (t ': ts) f -> Either (t f) (Sum ts f)+unconsCoRec s = case decompose s of+  Left s'     -> Right s'+  Right found -> Left found -instance FMatch1 t (t ': ts) 'Z where-  fmatch1' _ (Compose Nothing :& xs) = Right xs-  fmatch1' (H h) (Compose (Just x) :& _) = Left (h x) -instance (FMatch1 t ts i, RIndex t (s ': ts) ~ 'S i,-          RDelete t (s ': ts) ~ (s ': RDelete t ts))-         => FMatch1 t (s ': ts) ('S i) where-  fmatch1' h (x :& xs) = (x :&) <$> fmatch1' h xs---- | Handle a single variant of a 'CoRec': either the function is--- applied to the variant or the type of the 'CoRec' is refined to--- reflect the fact that the variant is /not/ compatible with the type--- of the would-be handler-fmatch1 :: (FMatch1 t ts (RIndex t ts),-            RecApplicative ts,-            FoldRec (RDelete t ts) (RDelete t ts))-        => Handler r (f t)-        -> CoRec f ts-        -> Either r (CoRec f (RDelete t ts))-fmatch1 h = fmap (fromJust . firstField)-          . fmatch1' h-          . coRecToRec--unconsCoRec :: (RecApplicative ts, FoldRec ts ts) => CoRec f (t ': ts) -> Either (f t) (CoRec f ts)-unconsCoRec = fmatch1 (H id)--newtype Flap a f = Flap (f a)- -- | @Union@ represents a value of any type constructor in @r@ applied with @a@.-newtype Union r a = Union (CoRec (Flap a) r)+newtype Union ts f = Union (Sum ts f)  instance GEq (Union '[]) where   _ `geq` _ = error "Not possible - empty union" -instance (RecApplicative r, FoldRec r r, GEq f, GEq (Union r)) => GEq (Union (f ': r)) where+instance (GEq f, GEq (Union r)) => GEq (Union (f ': r)) where   Union a `geq` Union b = case (unconsCoRec a, unconsCoRec b) of-    (Left (Flap fa), Left (Flap fb)) -> fa `geq` fb+    (Left fa, Left fb)   -> fa `geq` fb     (Right a', Right b') -> Union a' `geq` Union b'-    _ -> Nothing+    _                    -> Nothing  instance GCompare (Union '[]) where   _ `gcompare` _ = error "Not possible - empty union" -instance (RecApplicative r, FoldRec r r, GCompare f, GCompare (Union r)) => GCompare (Union (f ': r)) where+instance (GCompare f, GCompare (Union r)) => GCompare (Union (f ': r)) where   Union a `gcompare` Union b = case (unconsCoRec a, unconsCoRec b) of-    (Left (Flap fa), Left (Flap fb)) -> fa `gcompare` fb-    (Right a', Right b')             -> Union a' `gcompare` Union b'-    (Left _, Right _)                -> GLT-    (Right _, Left _)                -> GGT+    (Left fa, Left fb)   -> fa `gcompare` fb+    (Right a', Right b') -> Union a' `gcompare` Union b'+    (Left _, Right _)    -> GLT+    (Right _, Left _)    -> GGT