packages feed

rebound 0.1.1.0 → 0.1.2.0

raw patch · 19 files changed

+607/−129 lines, 19 filesdep +HUnitdep +prettyprinterdep ~QuickCheckdep ~basedep ~containersnew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: HUnit, prettyprinter

Dependency ranges changed: QuickCheck, base, containers, deepseq, fin, mtl, vec

API changes (from Hackage documentation)

- Data.Fin: S :: Nat -> Nat
- Data.Fin: Z :: Nat
- Data.Fin: [FS] :: forall (n1 :: Nat). Fin n1 -> Fin ('S n1)
- Data.Fin: [FZ] :: forall (n1 :: Nat). Fin ('S n1)
- Data.Fin: [SS] :: forall (n1 :: Nat). SNatI n1 => SNat ('S n1)
- Data.Fin: [SZ] :: SNat 'Z
- Data.Fin: absurd :: Fin Nat0 -> b
- Data.Fin: data Fin (n :: Nat)
- Data.Fin: data Nat
- Data.Fin: data SNat (n :: Nat)
- Data.Fin: f0 :: forall (n :: Nat). Fin ('S n)
- Data.Fin: f1 :: forall (n :: Nat). Fin ('S ('S n))
- Data.Fin: f2 :: forall (n :: Nat). Fin ('S ('S ('S n)))
- Data.Fin: f3 :: forall (n :: Nat). Fin ('S ('S ('S ('S n))))
- Data.Fin: fromNat :: forall (n :: Nat). SNatI n => Nat -> Maybe (Fin n)
- Data.Fin: instance Data.SNat.ToInt (Data.Fin.Fin n)
- Data.Fin: invert :: forall (n :: Nat). SNatI n => Fin n -> Fin n
- Data.Fin: mirror :: forall (n :: Nat). SNatI n => Fin n -> Fin n
- Data.Fin: pattern SS' :: forall m n. () => m ~ 'S n => SNat n -> SNat m
- Data.Fin: shift1 :: forall (m :: Nat). Fin m -> Fin ('S m)
- Data.Fin: shiftN :: forall (n :: Nat) (m :: Nat). SNat n -> Fin m -> Fin (n + m)
- Data.Fin: strengthen1Fin :: forall (n :: Nat). SNatI n => Fin ('S n) -> Maybe (Fin n)
- Data.Fin: strengthenRecFin :: forall (k :: Nat) (m :: Nat) proxy (n :: Nat). SNat k -> SNat m -> proxy n -> Fin (k + (m + n)) -> Maybe (Fin (k + n))
- Data.Fin: toInteger :: Integral a => a -> Integer
- Data.Fin: toNat :: forall (n :: Nat). Fin n -> Nat
- Data.Fin: universe :: forall (n :: Nat). SNatI n => [Fin n]
- Data.Fin: weaken1Fin :: forall (n :: Nat). Fin n -> Fin ('S n)
- Data.Fin: weaken1FinRight :: forall (n :: Nat). Fin n -> Fin (n + N1)
- Data.Fin: weakenFin :: forall proxy (m :: Nat) (n :: Nat). proxy m -> Fin n -> Fin (m + n)
- Data.Fin: weakenFinRight :: forall proxy (m :: Nat) (n :: Nat). proxy m -> Fin n -> Fin (n + m)
- Data.LocalName: LocalName :: String -> LocalName
- Data.LocalName: [name] :: LocalName -> String
- Data.LocalName: instance GHC.Classes.Eq Data.LocalName.LocalName
- Data.LocalName: instance GHC.Show.Show Data.LocalName.LocalName
- Data.LocalName: internalName :: LocalName
- Data.LocalName: newtype LocalName
- Data.SNat: S :: Nat -> Nat
- Data.SNat: Z :: Nat
- Data.SNat: [SS] :: forall (n1 :: Nat). SNatI n1 => SNat ('S n1)
- Data.SNat: [SS_] :: forall (n1 :: Nat). SNat n1 -> SNat_ ('S n1)
- Data.SNat: [SZ] :: SNat 'Z
- Data.SNat: [SZ_] :: SNat_ 'Z
- Data.SNat: axiomAssoc :: forall (p :: Nat) (m :: Nat) (n :: Nat). (p + (m + n)) :~: ((p + m) + n)
- Data.SNat: axiomPlusZ :: forall (m :: Nat). (m + 'Z) :~: m
- Data.SNat: class SNatI (n :: Nat)
- Data.SNat: class ToInt a
- Data.SNat: data Nat
- Data.SNat: data SNat (n :: Nat)
- Data.SNat: data SNat_ (n :: Nat)
- Data.SNat: fromNatural :: Natural -> Nat
- Data.SNat: induction :: SNatI n => f 'Z -> (forall (m :: Nat). SNatI m => f m -> f ('S m)) -> f n
- Data.SNat: instance Data.SNat.ToInt (Data.Type.Nat.SNat n)
- Data.SNat: instance Data.Type.Nat.SNatI n => Test.QuickCheck.Arbitrary.Arbitrary (Data.Type.Nat.SNat n)
- Data.SNat: next :: forall (n :: Nat). SNat n -> SNat ('S n)
- Data.SNat: pattern SS' :: forall m n. () => m ~ 'S n => SNat n -> SNat m
- Data.SNat: prev :: forall (n :: Nat). SNat ('S n) -> SNat n
- Data.SNat: reflect :: forall (n :: Nat) proxy. SNatI n => proxy n -> Nat
- Data.SNat: reify :: Nat -> (forall (n :: Nat). SNatI n => Proxy n -> r) -> r
- Data.SNat: s0 :: SNat N0
- Data.SNat: s1 :: SNat N1
- Data.SNat: s2 :: SNat N2
- Data.SNat: s3 :: SNat N3
- Data.SNat: sPlus :: forall (n1 :: Nat) (n2 :: Nat). SNat n1 -> SNat n2 -> SNat (n1 + n2)
- Data.SNat: snat :: forall (n :: Nat). SNatI n => SNat n
- Data.SNat: snatToNat :: forall (n :: Nat). SNat n -> Nat
- Data.SNat: snat_ :: forall (n :: Nat). SNat n -> SNat_ n
- Data.SNat: toInt :: ToInt a => a -> Int
- Data.SNat: toNatural :: Nat -> Natural
- Data.SNat: type N0 = 'Z
- Data.SNat: type N1 = 'S N0
- Data.SNat: type N2 = 'S N1
- Data.SNat: type N3 = 'S N2
- Data.SNat: type family (n :: Nat) + (m :: Nat) :: Nat
- Data.SNat: withSNat :: forall (n :: Nat) r. SNat n -> (SNatI n => r) -> r
- Data.Scoped.Classes: (<*>) :: forall (a :: k -> Type) (b :: k -> Type) (n :: k). ScopedApplicative k1 t => t (a ~> b) n -> t a n -> t b n
- Data.Scoped.Classes: (>>=) :: forall a (n :: k) (b :: k -> Type) (m :: k). ScopedMonad k1 t => t a n -> (a n -> t b m) -> t b m
- Data.Scoped.Classes: MkArr :: (a n -> b n) -> (~>) (a :: k -> Type) (b :: k -> Type) (n :: k)
- Data.Scoped.Classes: all :: forall a (n :: k). ScopedFoldable k1 f => (a n -> Bool) -> f a n -> Bool
- Data.Scoped.Classes: any :: forall a (n :: k). ScopedFoldable k1 f => (a n -> Bool) -> f a n -> Bool
- Data.Scoped.Classes: class (forall (a :: k -> Type) (n :: k). () => Coercible t a n k1 a n, Applicative k1) => ScopedApplicative (k1 :: Type -> Type) (t :: k -> Type -> k -> Type) | t -> k1
- Data.Scoped.Classes: class (forall (a :: k -> Type) (n :: k). () => Coercible f a n k1 a n, Foldable k1) => ScopedFoldable (k1 :: Type -> Type) (f :: k -> Type -> k -> Type) | f -> k1
- Data.Scoped.Classes: class (forall (a :: k -> Type) (n :: k). () => Coercible f a n k1 a n, Functor k1) => ScopedFunctor (k1 :: Type -> Type) (f :: k -> Type -> k -> Type) | f -> k1
- Data.Scoped.Classes: class (forall (a :: k -> Type) (n :: k). () => Coercible t a n k1 a n, Monad k1, ScopedApplicative k1 t) => ScopedMonad (k1 :: Type -> Type) (t :: k -> Type -> k -> Type) | t -> k1
- Data.Scoped.Classes: class (forall (a :: k -> Type) (n :: k). () => Coercible t a n k1 a n, Traversable k1) => ScopedTraversable (k1 :: Type -> Type) (t :: k -> Type -> k -> Type) | t -> k1
- Data.Scoped.Classes: elem :: forall a (n :: k). (ScopedFoldable k1 f, Eq (a n)) => a n -> f a n -> Bool
- Data.Scoped.Classes: fmap :: forall a (n :: k) b. (ScopedFunctor k1 f, Functor k1) => (a n -> b n) -> f a n -> f b n
- Data.Scoped.Classes: fold :: forall a (n :: k). (ScopedFoldable k1 f, Monoid (a n)) => f a n -> a n
- Data.Scoped.Classes: foldMap :: forall m a (n :: k). (ScopedFoldable k1 f, Monoid m) => (a n -> m) -> f a n -> m
- Data.Scoped.Classes: foldMap' :: forall m a (n :: k). (ScopedFoldable k1 f, Monoid m) => (a n -> m) -> f a n -> m
- Data.Scoped.Classes: foldl :: forall b a (n :: k). ScopedFoldable k1 f => (b -> a n -> b) -> b -> f a n -> b
- Data.Scoped.Classes: foldl' :: forall b a (n :: k). ScopedFoldable k1 f => (b -> a n -> b) -> b -> f a n -> b
- Data.Scoped.Classes: foldl1 :: forall a (n :: k). ScopedFoldable k1 f => (a n -> a n -> a n) -> f a n -> a n
- Data.Scoped.Classes: foldr :: forall a (n :: k) b. ScopedFoldable k1 f => (a n -> b -> b) -> b -> f a n -> b
- Data.Scoped.Classes: foldr' :: forall a (n :: k) b. ScopedFoldable k1 f => (a n -> b -> b) -> b -> f a n -> b
- Data.Scoped.Classes: foldr1 :: forall a (n :: k). ScopedFoldable k1 f => (a n -> a n -> a n) -> f a n -> a n
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). (Test.QuickCheck.Arbitrary.Arbitrary (a n), GHC.Show.Show (a n), Test.QuickCheck.Property.Testable (b n)) => Test.QuickCheck.Property.Testable ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). (Test.QuickCheck.Arbitrary.Arbitrary (a n), Test.QuickCheck.Arbitrary.CoArbitrary (b n)) => Test.QuickCheck.Arbitrary.CoArbitrary ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). (Test.QuickCheck.Arbitrary.CoArbitrary (a n), Test.QuickCheck.Arbitrary.Arbitrary (b n)) => Test.QuickCheck.Arbitrary.Arbitrary ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). Control.DeepSeq.NFData ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). GHC.Base.Monoid (b n) => GHC.Base.Monoid ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). GHC.Base.Semigroup (b n) => GHC.Base.Semigroup ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: instance forall k (a :: k -> *) (b :: k -> *) (n :: k). GHC.Generics.Generic ((Data.Scoped.Classes.~>) a b n)
- Data.Scoped.Classes: length :: forall (a :: k -> Type) (n :: k). ScopedFoldable k1 f => f a n -> Int
- Data.Scoped.Classes: mapM :: forall m a (n :: k) b. (ScopedTraversable k1 t, Monad m) => (a n -> m (b n)) -> t a n -> m (t b n)
- Data.Scoped.Classes: mapM_ :: forall m a (n :: k) b. (ScopedFoldable k1 f, Monad m) => (a n -> m b) -> f a n -> m ()
- Data.Scoped.Classes: maximum :: forall a (n :: k). (ScopedFoldable k1 f, Ord (a n)) => f a n -> a n
- Data.Scoped.Classes: minimum :: forall a (n :: k). (ScopedFoldable k1 f, Ord (a n)) => f a n -> a n
- Data.Scoped.Classes: newtype ( (a :: k -> Type) ~> (b :: k -> Type) ) (n :: k)
- Data.Scoped.Classes: null :: forall (a :: k -> Type) (n :: k). ScopedFoldable k1 f => f a n -> Bool
- Data.Scoped.Classes: product :: forall a (n :: k). (ScopedFoldable k1 f, Num (a n)) => f a n -> a n
- Data.Scoped.Classes: pure :: forall a (n :: k). ScopedApplicative k1 t => a n -> t a n
- Data.Scoped.Classes: return :: forall a (n :: k). ScopedMonad k1 t => a n -> t a n
- Data.Scoped.Classes: sum :: forall a (n :: k). (ScopedFoldable k1 f, Num (a n)) => f a n -> a n
- Data.Scoped.Classes: traverse :: forall a b (n :: k) f. (ScopedTraversable k1 t, Applicative f) => (a n -> f (b n)) -> t a n -> f (t b n)
- Data.Scoped.List: (++) :: forall {k} (t :: k -> Type) (n :: k). List t n -> List t n -> List t n
- Data.Scoped.List: -- structure <tt>l</tt>.
- Data.Scoped.List: -- | The <a>Item</a> type function returns the type of items of the
- Data.Scoped.List: class IsList l where {
- Data.Scoped.List: concat :: forall {k} (t :: k -> Type) (n :: k). List (List t) n -> List t n
- Data.Scoped.List: data List (a :: k -> Type) (n :: k)
- Data.Scoped.List: filter :: forall {k} a (n :: k). (a n -> Bool) -> List a n -> List a n
- Data.Scoped.List: fromList :: IsList l => [Item l] -> l
- Data.Scoped.List: fromListN :: IsList l => Int -> [Item l] -> l
- Data.Scoped.List: instance Data.Scoped.Classes.ScopedApplicative [] Data.Scoped.List.List
- Data.Scoped.List: instance Data.Scoped.Classes.ScopedFoldable [] Data.Scoped.List.List
- Data.Scoped.List: instance Data.Scoped.Classes.ScopedFunctor [] Data.Scoped.List.List
- Data.Scoped.List: instance Data.Scoped.Classes.ScopedMonad [] Data.Scoped.List.List
- Data.Scoped.List: instance Data.Scoped.Classes.ScopedTraversable [] Data.Scoped.List.List
- Data.Scoped.List: instance GHC.Generics.Generic1 (Data.Scoped.List.List a)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). Control.DeepSeq.NFData (a n) => Control.DeepSeq.NFData (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Base.Monoid (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Base.Semigroup (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Classes.Eq (a n) => GHC.Classes.Eq (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Classes.Ord (a n) => GHC.Classes.Ord (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Generics.Generic (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Read.Read (a n) => GHC.Read.Read (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). GHC.Show.Show (a n) => GHC.Show.Show (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (a :: k -> *) (n :: k). Test.QuickCheck.Arbitrary.Arbitrary (a n) => Test.QuickCheck.Arbitrary.Arbitrary (Data.Scoped.List.List a n)
- Data.Scoped.List: instance forall k (v :: k -> *) (n :: k). GHC.IsList.IsList (Data.Scoped.List.List v n)
- Data.Scoped.List: pattern (:<) :: a n -> List a n -> List a n
- Data.Scoped.List: pattern Nil :: List a n
- Data.Scoped.List: toList :: IsList l => l -> [Item l]
- Data.Scoped.List: type Item l;
- Data.Scoped.List: uncons :: forall {k} a (n :: k). List a n -> Maybe (a n, List a n)
- Data.Scoped.List: zipWith :: forall {k} a (n :: k) b c. (a n -> b n -> c n) -> List a n -> List b n -> List c n
- Data.Scoped.List: zipWithM_ :: forall {k1} {k2} {k3} {k4} m (k5 :: k1) (f1 :: k2) (f2 :: k3) a b c (n :: k4). Applicative m => (a n -> b n -> m c) -> List a n -> List b n -> m ()
- Data.Scoped.List: }
- Data.Scoped.Maybe: MkMaybe :: Maybe (a n) -> Maybe (a :: k -> Type) (n :: k)
- Data.Scoped.Maybe: fromJust :: forall {k} a (n :: k). HasCallStack => Maybe a n -> a n
- Data.Scoped.Maybe: fromMaybe :: forall {k} a (n :: k). a n -> Maybe a n -> a n
- Data.Scoped.Maybe: instance Data.Scoped.Classes.ScopedApplicative GHC.Maybe.Maybe Data.Scoped.Maybe.Maybe
- Data.Scoped.Maybe: instance Data.Scoped.Classes.ScopedFoldable GHC.Maybe.Maybe Data.Scoped.Maybe.Maybe
- Data.Scoped.Maybe: instance Data.Scoped.Classes.ScopedFunctor GHC.Maybe.Maybe Data.Scoped.Maybe.Maybe
- Data.Scoped.Maybe: instance Data.Scoped.Classes.ScopedMonad GHC.Maybe.Maybe Data.Scoped.Maybe.Maybe
- Data.Scoped.Maybe: instance Data.Scoped.Classes.ScopedTraversable GHC.Maybe.Maybe Data.Scoped.Maybe.Maybe
- Data.Scoped.Maybe: instance GHC.Generics.Generic1 (Data.Scoped.Maybe.Maybe a)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). Control.DeepSeq.NFData (a n) => Control.DeepSeq.NFData (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). GHC.Base.Semigroup (a n) => GHC.Base.Monoid (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). GHC.Base.Semigroup (a n) => GHC.Base.Semigroup (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). GHC.Classes.Eq (a n) => GHC.Classes.Eq (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). GHC.Classes.Ord (a n) => GHC.Classes.Ord (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). GHC.Generics.Generic (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). GHC.Show.Show (a n) => GHC.Show.Show (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: instance forall k (a :: k -> *) (n :: k). Test.QuickCheck.Arbitrary.Arbitrary (a n) => Test.QuickCheck.Arbitrary.Arbitrary (Data.Scoped.Maybe.Maybe a n)
- Data.Scoped.Maybe: isJust :: forall {k} (a :: k -> Type) (n :: k). Maybe a n -> Bool
- Data.Scoped.Maybe: isNothing :: forall {k} (a :: k -> Type) (n :: k). Maybe a n -> Bool
- Data.Scoped.Maybe: listToMaybe :: forall {k} a (n :: k). [a n] -> Maybe a n
- Data.Scoped.Maybe: maybe :: forall {k} b a (n :: k). b -> (a n -> b) -> Maybe a n -> b
- Data.Scoped.Maybe: maybeToList :: forall {k} a (n :: k). Maybe a n -> [a n]
- Data.Scoped.Maybe: newtype Maybe (a :: k -> Type) (n :: k)
- Data.Scoped.Maybe: pattern Just :: a n -> Maybe a n
- Data.Scoped.Maybe: pattern Nothing :: Maybe a n
- Data.Vec: all2 :: forall a b (n :: Nat). (a -> b -> Bool) -> Vec n a -> Vec n b -> Bool
- Data.Vec: append :: forall (n :: Nat) (m :: Nat) a. Vec n a -> Vec m a -> Vec (n + m) a
- Data.Vec: setAt :: forall (n :: Nat) a. Fin n -> Vec n a -> a -> Vec n a
- Data.Vec: vlength :: forall (n :: Nat) a. Vec n a -> SNat n
- Rebound: -- | Generic representation type
- Rebound: class Generic a where {
- Rebound: class Generic1 (f :: k -> Type) where {
- Rebound: from :: Generic a => a -> Rep a x
- Rebound: from1 :: forall (a :: k). Generic1 f => f a -> Rep1 f a
- Rebound: to :: Generic a => Rep a x -> a
- Rebound: to1 :: forall (a :: k). Generic1 f => Rep1 f a -> f a
- Rebound: type Rep a :: Type -> Type;
- Rebound: type Rep1 (f :: k -> Type) :: k -> Type;
- Rebound: }
- Rebound.Bind.Local: applyUnder :: forall (v :: Nat -> Type) c (n2 :: Nat) (n1 :: Nat). Subst v c => (forall (m :: Nat). () => Env v m ('S n2) -> c m -> c ('S n2)) -> Env v n1 n2 -> Bind v c n1 -> Bind v c n2
- Rebound.Bind.Local: bind :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => LocalName -> c ('S n) -> Bind v c n
- Rebound.Bind.Local: bindWith :: forall (v :: Nat -> Type) c (m :: Nat) (n :: Nat). LocalName -> Env v m n -> c ('S m) -> Bind v c n
- Rebound.Bind.Local: getBody :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind v c n -> c ('S n)
- Rebound.Bind.Local: getLocalName :: forall (v :: Nat -> Type) (c :: Nat -> Type) (n :: Nat). Bind v c n -> LocalName
- Rebound.Bind.Local: instance GHC.Classes.Eq (Rebound.Bind.Local.Exp n)
- Rebound.Bind.Local: instance GHC.Generics.Generic1 Rebound.Bind.Local.Exp
- Rebound.Bind.Local: instance Rebound.Env.Lazy.Subst Rebound.Bind.Local.Exp Rebound.Bind.Local.Exp
- Rebound.Bind.Local: instance Rebound.Env.Lazy.SubstVar Rebound.Bind.Local.Exp
- Rebound.Bind.Local: instantiate :: forall v c (n :: Nat). Subst v c => Bind v c n -> v n -> c n
- Rebound.Bind.Local: instantiateWith :: forall v c (n :: Nat). SubstVar v => Bind v c n -> v n -> (forall (m :: Nat). () => Env v m n -> c m -> c n) -> c n
- Rebound.Bind.Local: internalBind :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => c ('S n) -> Bind v c n
- Rebound.Bind.Local: type Bind (v :: Nat -> Type) (c :: Nat -> Type) (n :: Nat) = Bind v c LocalName n
- Rebound.Bind.Local: unbind :: forall (v :: Nat -> Type) c (n :: Nat) d. Subst v c => Bind v c n -> ((LocalName, c ('S n)) -> d) -> d
- Rebound.Bind.Local: unbindWith :: forall (v :: Nat -> Type) c (n :: Nat) d. SubstVar v => Bind v c n -> (forall (m :: Nat). () => LocalName -> Env v m n -> c ('S m) -> d) -> d
- Rebound.Bind.Local: unbindl :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind v c n -> (LocalName, c ('S n))
- Rebound.Bind.Pat: [PCons] :: forall (pat :: Nat -> Type) (p1 :: Nat) (p2 :: Nat). Size (pat p1) ~ p1 => pat p1 -> PatList pat p2 -> PatList pat (p2 + p1)
- Rebound.Bind.Pat: [PNil] :: forall (pat :: Nat -> Type). PatList pat 'Z
- Rebound.Bind.Pat: [Rebind] :: forall pat (p2 :: Nat -> Type) (n :: Nat). pat -> p2 (Size pat + n) -> Rebind pat p2 n
- Rebound.Bind.Pat: applyUnder :: forall pat (v :: Nat -> Type) c2 (n2 :: Nat) c1 (n1 :: Nat). (Sized pat, Subst v c2) => (forall (m :: Nat). () => Env v m (Size pat + n2) -> c1 m -> c2 (Size pat + n2)) -> Env v n1 n2 -> Bind v c1 pat n1 -> Bind v c2 pat n2
- Rebound.Bind.Pat: bind :: forall pat (v :: Nat -> Type) c (n :: Nat). (Sized pat, Subst v c) => pat -> c (Size pat + n) -> Bind v c pat n
- Rebound.Bind.Pat: bindWith :: forall pat (v :: Nat -> Type) (m :: Nat) (n :: Nat) c. pat -> Env v m n -> c (Size pat + m) -> Bind v c pat n
- Rebound.Bind.Pat: data Bind (v :: Nat -> Type) (c :: Nat -> Type) pat (n :: Nat)
- Rebound.Bind.Pat: data PatList (pat :: Nat -> Type) (p :: Nat)
- Rebound.Bind.Pat: data Rebind pat (p2 :: Nat -> Type) (n :: Nat)
- Rebound.Bind.Pat: getBody :: forall (v :: Nat -> Type) c pat (n :: Nat). (Sized pat, Subst v c) => Bind v c pat n -> c (Size pat + n)
- Rebound.Bind.Pat: getPat :: forall (v :: Nat -> Type) (c :: Nat -> Type) pat (n :: Nat). Bind v c pat n -> pat
- Rebound.Bind.Pat: instance (GHC.Classes.Eq pat, Rebound.Classes.Sized pat, forall (n1 :: Data.Nat.Nat). GHC.Classes.Eq (c n1), Rebound.Env.Lazy.Subst v c) => GHC.Classes.Eq (Rebound.Bind.Pat.Bind v c pat n)
- Rebound.Bind.Pat: instance (Rebound.Classes.Sized p, Rebound.Env.Lazy.Subst v c, Rebound.Classes.Strengthen c) => Rebound.Classes.Strengthen (Rebound.Bind.Pat.Bind v c p)
- Rebound.Bind.Pat: instance (Rebound.Classes.Sized p1, Rebound.Classes.FV p2) => Rebound.Classes.FV (Rebound.Bind.Pat.Rebind p1 p2)
- Rebound.Bind.Pat: instance (Rebound.Classes.Sized p1, Rebound.Classes.Strengthen p2) => Rebound.Classes.Strengthen (Rebound.Bind.Pat.Rebind p1 p2)
- Rebound.Bind.Pat: instance (Rebound.Env.Lazy.Subst v c, Rebound.Classes.Sized p, Rebound.Classes.FV c) => Rebound.Classes.FV (Rebound.Bind.Pat.Bind v c p)
- Rebound.Bind.Pat: instance (Rebound.Env.Lazy.SubstVar v, Rebound.Classes.Sized p1, Rebound.Env.Lazy.Subst v p2) => Rebound.Classes.Shiftable (Rebound.Bind.Pat.Rebind p1 p2)
- Rebound.Bind.Pat: instance (Rebound.Env.Lazy.SubstVar v, Rebound.Classes.Sized p1, Rebound.Env.Lazy.Subst v p2) => Rebound.Env.Lazy.Subst v (Rebound.Bind.Pat.Rebind p1 p2)
- Rebound.Bind.Pat: instance (forall (n :: Data.Nat.Nat). Rebound.Classes.Sized (pat n)) => Rebound.Classes.Sized (Rebound.Bind.Pat.PatList pat p)
- Rebound.Bind.Pat: instance (forall (p4 :: Data.Nat.Nat) (p5 :: Data.Nat.Nat). Rebound.Classes.PatEq (pat p4) (pat p5)) => Rebound.Classes.PatEq (Rebound.Bind.Pat.PatList pat p1) (Rebound.Bind.Pat.PatList pat p2)
- Rebound.Bind.Pat: instance Rebound.Env.Lazy.SubstVar v => Rebound.Classes.Shiftable (Rebound.Bind.Pat.Bind v c p)
- Rebound.Bind.Pat: instance Rebound.Env.Lazy.SubstVar v => Rebound.Env.Lazy.Subst v (Rebound.Bind.Pat.Bind v c p)
- Rebound.Bind.Pat: instantiate :: forall (v :: Nat -> Type) c pat (n :: Nat). (Sized pat, Subst v c) => Bind v c pat n -> Env v (Size pat) n -> c n
- Rebound.Bind.Pat: instantiateWith :: forall pat (v :: Nat -> Type) c (n :: Nat). (Sized pat, SubstVar v) => Bind v c pat n -> Env v (Size pat) n -> (forall (m :: Nat). () => Env v m n -> c m -> c n) -> c n
- Rebound.Bind.Pat: lengthPL :: forall (pat :: Nat -> Type) (p :: Nat). PatList pat p -> Int
- Rebound.Bind.Pat: unbind :: forall (v :: Nat -> Type) c pat (n :: Nat) d. (SNatI n, Sized pat, Subst v v, Subst v c) => Bind v c pat n -> (SNatI (Size pat + n) => pat -> c (Size pat + n) -> d) -> d
- Rebound.Bind.Pat: unbindWith :: forall pat (v :: Nat -> Type) c (n :: Nat) d. (Sized pat, SubstVar v) => Bind v c pat n -> (forall (m :: Nat). () => pat -> Env v m n -> c (Size pat + m) -> d) -> d
- Rebound.Bind.Pat: unbindl :: forall pat (v :: Nat -> Type) c (n :: Nat). (Sized pat, Subst v c) => Bind v c pat n -> (pat, c (Size pat + n))
- Rebound.Bind.PatN: [PatN] :: forall (p :: Nat). SNat p -> PatN p
- Rebound.Bind.PatN: applyUnder1 :: forall (v :: Nat -> Type) c2 (n2 :: Nat) c1 (n1 :: Nat). Subst v c2 => (forall (m :: Nat). () => Env v m ('S n2) -> c1 m -> c2 ('S n2)) -> Env v n1 n2 -> Bind1 v c1 n1 -> Bind1 v c2 n2
- Rebound.Bind.PatN: applyUnder2 :: forall (v :: Nat -> Type) c2 (n2 :: Nat) c1 (n1 :: Nat). Subst v c2 => (forall (m :: Nat). () => Env v m ('S ('S n2)) -> c1 m -> c2 ('S ('S n2))) -> Env v n1 n2 -> Bind2 v c1 n1 -> Bind2 v c2 n2
- Rebound.Bind.PatN: applyUnderN :: forall (v :: Nat -> Type) c2 (k :: Nat) (n2 :: Nat) c1 (n1 :: Nat). (Subst v c2, SNatI k) => (forall (m :: Nat). () => Env v m (k + n2) -> c1 m -> c2 (k + n2)) -> Env v n1 n2 -> BindN v c1 k n1 -> BindN v c2 k n2
- Rebound.Bind.PatN: bind1 :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => c ('S n) -> Bind1 v c n
- Rebound.Bind.PatN: bind2 :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => c ('S ('S n)) -> Bind2 v c n
- Rebound.Bind.PatN: bindN :: forall (m :: Nat) (v :: Nat -> Type) c (n :: Nat). (Subst v c, SNatI m) => c (m + n) -> BindN v c m n
- Rebound.Bind.PatN: bindWith1 :: forall (v :: Nat -> Type) c (m :: Nat) (n :: Nat). Env v m n -> c ('S m) -> Bind1 v c n
- Rebound.Bind.PatN: bindWith2 :: forall (v :: Nat -> Type) c (m :: Nat) (n :: Nat). Env v m n -> c ('S ('S m)) -> Bind2 v c n
- Rebound.Bind.PatN: bindWithN :: forall (p :: Nat) (v :: Nat -> Type) c (m :: Nat) (n :: Nat). SNatI p => Env v m n -> c (p + m) -> BindN v c p n
- Rebound.Bind.PatN: getBody1 :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind1 v c n -> c ('S n)
- Rebound.Bind.PatN: getBody2 :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind2 v c n -> c ('S ('S n))
- Rebound.Bind.PatN: getBodyN :: forall (m :: Nat) (v :: Nat -> Type) c (n :: Nat). (Subst v c, SNatI m) => BindN v c m n -> c (m + n)
- Rebound.Bind.PatN: instance Data.Type.Equality.TestEquality Rebound.Bind.PatN.PatN
- Rebound.Bind.PatN: instance Data.Type.Nat.SNatI p => Rebound.Classes.SizeIndex Rebound.Bind.PatN.PatN p
- Rebound.Bind.PatN: instance Data.Type.Nat.SNatI p => Rebound.Classes.Sized (Rebound.Bind.PatN.PatN p)
- Rebound.Bind.PatN: instance GHC.Classes.Eq (Rebound.Bind.PatN.PatN p)
- Rebound.Bind.PatN: instantiate1 :: forall v c (n :: Nat). Subst v c => Bind1 v c n -> v n -> c n
- Rebound.Bind.PatN: instantiate2 :: forall v c (n :: Nat). Subst v c => Bind2 v c n -> v n -> v n -> c n
- Rebound.Bind.PatN: instantiateN :: forall v c (m :: Nat) (n :: Nat). (Subst v c, SNatI m) => BindN v c m n -> Vec m (v n) -> c n
- Rebound.Bind.PatN: instantiateWith1 :: forall v c (n :: Nat) d. SubstVar v => Bind1 v c n -> v n -> (forall (m :: Nat). () => Env v m n -> c m -> d n) -> d n
- Rebound.Bind.PatN: instantiateWith2 :: forall v (n :: Nat) c d. (SubstVar v, SNatI n) => Bind2 v c n -> v n -> v n -> (forall (m :: Nat). () => Env v m n -> c m -> d n) -> d n
- Rebound.Bind.PatN: instantiateWithN :: forall (m :: Nat) v c d (n :: Nat). (SubstVar v, SNatI n, SNatI m) => BindN v c m n -> Vec m (v n) -> (forall (m1 :: Nat). () => Env v m1 n -> c m1 -> d n) -> d n
- Rebound.Bind.PatN: newtype PatN (p :: Nat)
- Rebound.Bind.PatN: type Bind1 (v :: Nat -> Type) (c :: Nat -> Type) (n :: Nat) = Bind v c PatN N1 n
- Rebound.Bind.PatN: type Bind2 (v :: Nat -> Type) (c :: Nat -> Type) (n :: Nat) = Bind v c PatN N2 n
- Rebound.Bind.PatN: type BindN (v :: Nat -> Type) (c :: Nat -> Type) (m :: Nat) (n :: Nat) = Bind v c PatN m n
- Rebound.Bind.PatN: unbind1 :: forall (v :: Nat -> Type) c (n :: Nat) d. (SNatI n, Subst v c) => Bind1 v c n -> (SNatI ('S n) => c ('S n) -> d) -> d
- Rebound.Bind.PatN: unbind2 :: forall (v :: Nat -> Type) c (n :: Nat) d. Subst v c => Bind2 v c n -> (c ('S ('S n)) -> d) -> d
- Rebound.Bind.PatN: unbindN :: forall (m :: Nat) (v :: Nat -> Type) c (n :: Nat) d. (Subst v c, SNatI n, SNatI m) => BindN v c m n -> (SNatI (m + n) => c (m + n) -> d) -> d
- Rebound.Bind.PatN: unbindWith1 :: forall (v :: Nat -> Type) c (n :: Nat) d. SubstVar v => Bind1 v c n -> (forall (m :: Nat). () => Env v m n -> c ('S m) -> d) -> d
- Rebound.Bind.PatN: unbindWith2 :: forall (v :: Nat -> Type) c (n :: Nat) d. SubstVar v => Bind2 v c n -> (forall (m :: Nat). () => Env v m n -> c ('S ('S m)) -> d) -> d
- Rebound.Bind.PatN: unbindWithN :: forall (v :: Nat -> Type) (m :: Nat) c (n :: Nat) d. (SubstVar v, SNatI m) => BindN v c m n -> (forall (m1 :: Nat). () => Env v m1 n -> c (m + m1) -> d) -> d
- Rebound.Bind.PatN: unbindl1 :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind1 v c n -> c ('S n)
- Rebound.Bind.PatN: unbindlN :: forall (m :: Nat) (v :: Nat -> Type) c (n :: Nat). (Subst v c, SNatI m) => BindN v c m n -> c (m + n)
- Rebound.Bind.Scoped: (<++>) :: forall (p1 :: Nat) (p2 :: Nat) (pat :: Nat -> Nat -> Type) (n :: Nat). IScopedSized pat => TeleList pat p1 n -> TeleList pat p2 (p1 + n) -> TeleList pat (p2 + p1) n
- Rebound.Bind.Scoped: (<:>) :: forall (p1 :: Nat) (p2 :: Nat) pat (n :: Nat). IScopedSized pat => pat p1 n -> TeleList pat p2 (p1 + n) -> TeleList pat (p2 + p1) n
- Rebound.Bind.Scoped: [TCons] :: forall (pat :: Nat -> Nat -> Type) (p2 :: Nat) (p1 :: Nat) (n :: Nat). (IScopedSized pat, (p2 + (p1 + n)) ~ ((p2 + p1) + n)) => pat p1 n -> TeleList pat p2 (p1 + n) -> TeleList pat (p2 + p1) n
- Rebound.Bind.Scoped: [TNil] :: forall (n :: Nat) (pat :: Nat -> Nat -> Type). (n + N0) ~ n => TeleList pat 'Z n
- Rebound.Bind.Scoped: applyUnder :: forall (pat :: Nat -> Type) (v :: Nat -> Type) c (n1 :: Nat) (n2 :: Nat). (ScopedSized pat, Subst v v, Subst v c, Subst v pat) => (forall (m :: Nat). () => Env v m (ScopedSize pat + n2) -> c m -> c (ScopedSize pat + n2)) -> Env v n1 n2 -> Bind v c pat n1 -> Bind v c pat n2
- Rebound.Bind.Scoped: bind :: forall (v :: Nat -> Type) c pat (n :: Nat). (ScopedSized pat, Subst v c) => pat n -> c (ScopedSize pat + n) -> Bind v c pat n
- Rebound.Bind.Scoped: class ScopedSize t p ~ p => EqScopedSized (t :: Nat -> Nat -> Type) (p :: Nat)
- Rebound.Bind.Scoped: class (Sized t p, Size t p ~ ScopedSize t) => EqSized (t :: Nat -> Type) (p :: Nat)
- Rebound.Bind.Scoped: class (forall (p :: Nat). () => ScopedSized pat p, forall (p :: Nat). () => EqScopedSized pat p) => IScopedSized (pat :: Nat -> Nat -> Type)
- Rebound.Bind.Scoped: class forall (p :: Nat). () => EqSized pat p => ScopedSized (pat :: Nat -> Type) where {
- Rebound.Bind.Scoped: data Bind (v :: Nat -> Type) (c :: Nat -> Type) (pat :: Nat -> Type) (n :: Nat)
- Rebound.Bind.Scoped: data TeleList (pat :: Nat -> Nat -> Type) (p :: Nat) (n :: Nat)
- Rebound.Bind.Scoped: getBody :: forall (v :: Nat -> Type) c (pat :: Nat -> Type) (n :: Nat). (ScopedSized pat, Subst v v, Subst v c) => Bind v c pat n -> c (ScopedSize pat + n)
- Rebound.Bind.Scoped: getPat :: forall (v :: Nat -> Type) (c :: Nat -> Type) pat (n :: Nat). Bind v c pat n -> pat n
- Rebound.Bind.Scoped: infixr 9 <:>
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.IScopedSized pat, Rebound.Env.Lazy.Subst v v, forall (p1 :: Data.Nat.Nat). Rebound.Env.Lazy.Subst v (pat p1)) => Rebound.Classes.Shiftable (Rebound.Bind.Scoped.TeleList pat p)
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.IScopedSized pat, Rebound.Env.Lazy.Subst v v, forall (p1 :: Data.Nat.Nat). Rebound.Env.Lazy.Subst v (pat p1)) => Rebound.Env.Lazy.Subst v (Rebound.Bind.Scoped.TeleList pat p)
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.IScopedSized pat, forall (p1 :: Data.Nat.Nat). Rebound.Classes.FV (pat p1)) => Rebound.Classes.FV (Rebound.Bind.Scoped.TeleList pat p)
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.ScopedSize (t p) GHC.Types.~ p) => Rebound.Bind.Scoped.EqScopedSized t p
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.ScopedSized p, Rebound.Env.Lazy.SubstVar v, Rebound.Env.Lazy.Subst v v, Rebound.Env.Lazy.Subst v c, Rebound.Classes.Strengthen c, Rebound.Classes.Strengthen p) => Rebound.Classes.Strengthen (Rebound.Bind.Scoped.Bind v c p)
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.ScopedSized pat, Rebound.Env.Lazy.Subst v pat, Rebound.Env.Lazy.Subst v v) => Rebound.Classes.Shiftable (Rebound.Bind.Scoped.Bind v c pat)
- Rebound.Bind.Scoped: instance (Rebound.Bind.Scoped.ScopedSized pat, Rebound.Env.Lazy.Subst v pat, Rebound.Env.Lazy.Subst v v) => Rebound.Env.Lazy.Subst v (Rebound.Bind.Scoped.Bind v c pat)
- Rebound.Bind.Scoped: instance (Rebound.Classes.Sized (t p), Rebound.Classes.Size (t p) GHC.Types.~ Rebound.Bind.Scoped.ScopedSize t) => Rebound.Bind.Scoped.EqSized t p
- Rebound.Bind.Scoped: instance (Rebound.Env.Lazy.Subst v c, Rebound.Bind.Scoped.ScopedSized p, Rebound.Classes.FV p, Rebound.Classes.FV c) => Rebound.Classes.FV (Rebound.Bind.Scoped.Bind v c p)
- Rebound.Bind.Scoped: instance (forall (p1 :: Data.Nat.Nat). Rebound.Classes.Strengthen (pat p1)) => Rebound.Classes.Strengthen (Rebound.Bind.Scoped.TeleList pat p)
- Rebound.Bind.Scoped: instance (forall (p4 :: Data.Nat.Nat) (p5 :: Data.Nat.Nat) (n4 :: Data.Nat.Nat) (n5 :: Data.Nat.Nat). Rebound.Classes.PatEq (pat p4 n4) (pat p5 n5), Rebound.Bind.Scoped.IScopedSized pat) => Rebound.Classes.PatEq (Rebound.Bind.Scoped.TeleList pat p1 n1) (Rebound.Bind.Scoped.TeleList pat p2 n2)
- Rebound.Bind.Scoped: instance Rebound.Bind.Scoped.IScopedSized (Rebound.Bind.Scoped.TeleList pat)
- Rebound.Bind.Scoped: instance Rebound.Bind.Scoped.ScopedSized (Rebound.Bind.Scoped.TeleList pat p)
- Rebound.Bind.Scoped: instance Rebound.Classes.Sized (Rebound.Bind.Scoped.TeleList pat p n)
- Rebound.Bind.Scoped: instance forall k (c :: Data.Nat.Nat -> *) (pat :: k -> Data.Nat.Nat -> *) (m :: k) (n :: Data.Nat.Nat) (v :: Data.Nat.Nat -> *). (forall (n1 :: Data.Nat.Nat). GHC.Classes.Eq (c n1), Rebound.Classes.PatEq (pat m n) (pat m n), Rebound.Bind.Scoped.ScopedSized (pat m), Rebound.Env.Lazy.Subst v c) => GHC.Classes.Eq (Rebound.Bind.Scoped.Bind v c (pat m) n)
- Rebound.Bind.Scoped: instantiate :: forall {k} (v :: Nat -> Type) c (pat :: Nat -> Type) (n :: Nat). (forall (n1 :: k). () => ScopedSized pat, Subst v c) => Bind v c pat n -> Env v (ScopedSize pat) n -> c n
- Rebound.Bind.Scoped: instantiateWeakenEnv :: forall {k} (p :: Nat) (n :: Nat) v (c :: k). (SubstVar v, Subst v v) => SNat p -> SNat n -> v (p + n) -> Env v ('S n) (p + n)
- Rebound.Bind.Scoped: instantiateWith :: forall (pat :: Nat -> Type) (v :: Nat -> Type) c (n :: Nat). (ScopedSized pat, SubstVar v) => Bind v c pat n -> Env v (ScopedSize pat) n -> (forall (m :: Nat). () => Env v m n -> c m -> c n) -> c n
- Rebound.Bind.Scoped: iscopedPatEq :: forall pat1 pat2 (p1 :: Nat) (n1 :: Nat) (p2 :: Nat) (n2 :: Nat). (IScopedSized pat1, IScopedSized pat2, PatEq (pat1 p1 n1) (pat2 p2 n2)) => pat1 p1 n1 -> pat2 p2 n2 -> Maybe (p1 :~: p2)
- Rebound.Bind.Scoped: iscopedSize :: forall pat (p :: Nat) (n :: Nat). IScopedSized pat => pat p n -> SNat p
- Rebound.Bind.Scoped: lengthTele :: forall (pat :: Nat -> Nat -> Type) (p :: Nat) (n :: Nat). TeleList pat p n -> Int
- Rebound.Bind.Scoped: nil :: forall (pat :: Nat -> Nat -> Type) (n :: Nat). TeleList pat N0 n
- Rebound.Bind.Scoped: scopedPatEq :: forall pat1 pat2 (p1 :: Nat) (p2 :: Nat). (ScopedSized pat1, ScopedSized pat2, PatEq (pat1 p1) (pat2 p2)) => pat1 p1 -> pat2 p2 -> Maybe (ScopedSize pat1 :~: ScopedSize pat2)
- Rebound.Bind.Scoped: scopedSize :: forall pat (p :: Nat). ScopedSized pat => pat p -> SNat (ScopedSize pat)
- Rebound.Bind.Scoped: type ScopedSize (pat :: Nat -> Type) :: Nat;
- Rebound.Bind.Scoped: unbind :: forall {k} (v :: Nat -> Type) c pat (n :: Nat) d. (SNatI n, forall (n1 :: k). () => ScopedSized pat, Subst v v, Subst v c) => Bind v c pat n -> (SNatI (ScopedSize pat + n) => pat n -> c (ScopedSize pat + n) -> d) -> d
- Rebound.Bind.Scoped: unbindWith :: forall pat (v :: Nat -> Type) c (n :: Nat) d. (forall (n1 :: Nat). () => Sized (pat n1), SubstVar v) => Bind v c pat n -> (forall (m :: Nat). () => pat n -> Env v m n -> c (ScopedSize pat + m) -> d) -> d
- Rebound.Bind.Scoped: unbindl :: forall (n :: Nat) (v :: Nat -> Type) c pat. (SNatI n, Subst v c, ScopedSized pat) => Bind v c pat n -> (pat n, c (ScopedSize pat + n))
- Rebound.Bind.Scoped: }
- Rebound.Bind.Single: applyUnder :: forall (v :: Nat -> Type) c2 (n2 :: Nat) c1 (n1 :: Nat). Subst v c2 => (forall (m :: Nat). () => Env v m ('S n2) -> c1 m -> c2 ('S n2)) -> Env v n1 n2 -> Bind v c1 n1 -> Bind v c2 n2
- Rebound.Bind.Single: bind :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => c ('S n) -> Bind v c n
- Rebound.Bind.Single: bindWith :: forall (v :: Nat -> Type) c (m :: Nat) (n :: Nat). Env v m n -> c ('S m) -> Bind v c n
- Rebound.Bind.Single: getBody :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind v c n -> c ('S n)
- Rebound.Bind.Single: instantiate :: forall v c (n :: Nat). Subst v c => Bind v c n -> v n -> c n
- Rebound.Bind.Single: instantiateWith :: forall v c (n :: Nat) d. SubstVar v => Bind v c n -> v n -> (forall (m :: Nat). () => Env v m n -> c m -> d n) -> d n
- Rebound.Bind.Single: type Bind (v :: Nat -> Type) (c :: Nat -> Type) (n :: Nat) = Bind1 v c n
- Rebound.Bind.Single: unbind :: forall (v :: Nat -> Type) c (n :: Nat) d. (SNatI n, Subst v c) => Bind v c n -> (SNatI ('S n) => c ('S n) -> d) -> d
- Rebound.Bind.Single: unbindWith :: forall (v :: Nat -> Type) c (n :: Nat) d. SubstVar v => Bind v c n -> (forall (m :: Nat). () => Env v m n -> c ('S m) -> d) -> d
- Rebound.Bind.Single: unbindl :: forall (v :: Nat -> Type) c (n :: Nat). Subst v c => Bind v c n -> c ('S n)
- Rebound.Classes: ($dmappearsFree) :: forall (n :: Nat). (FV t, Generic1 t, GFV (Rep1 t)) => Fin n -> t n -> Bool
- Rebound.Classes: ($dmfreeVars) :: forall (n :: Nat). (FV t, Generic1 t, GFV (Rep1 t)) => t n -> Set (Fin n)
- Rebound.Classes: ($dmstrengthenRec) :: forall (k :: Nat) (m :: Nat) (n :: Nat). (Strengthen t, Generic1 t, GStrengthen (Rep1 t)) => SNat k -> SNat m -> SNat n -> t (k + (m + n)) -> Maybe (t (k + n))
- Rebound.Classes: appearsFree :: forall (n :: Nat). FV t => Fin n -> t n -> Bool
- Rebound.Classes: class FV (t :: Nat -> Type)
- Rebound.Classes: class GFV (t :: Nat -> Type)
- Rebound.Classes: class GStrengthen (t :: Nat -> Type)
- Rebound.Classes: class PatEq t1 t2
- Rebound.Classes: class Shiftable (t :: Nat -> Type)
- Rebound.Classes: class (Sized t p, Size t p ~ p) => SizeIndex (t :: Nat -> Type) (p :: Nat)
- Rebound.Classes: class Sized t where {
- Rebound.Classes: class Strengthen (t :: Nat -> Type)
- Rebound.Classes: freeVars :: forall (n :: Nat). FV t => t n -> Set (Fin n)
- Rebound.Classes: gappearsFree :: forall (n :: Nat). GFV t => Fin n -> t n -> Bool
- Rebound.Classes: gfreeVars :: forall (n :: Nat). GFV t => t n -> Set (Fin n)
- Rebound.Classes: gstrengthenRec :: forall (k :: Nat) (m :: Nat) (n :: Nat). GStrengthen t => SNat k -> SNat m -> SNat n -> t (k + (m + n)) -> Maybe (t (k + n))
- Rebound.Classes: instance (Rebound.Classes.PatEq a1 a2, Rebound.Classes.PatEq b1 b2) => Rebound.Classes.PatEq (a1, b1) (a2, b2)
- Rebound.Classes: instance (Rebound.Classes.Sized a, Rebound.Classes.Sized b) => Rebound.Classes.Sized (a, b)
- Rebound.Classes: instance GHC.Classes.Eq a => Rebound.Classes.PatEq (Data.Vec.Lazy.Vec n1 a) (Data.Vec.Lazy.Vec n2 a)
- Rebound.Classes: instance Rebound.Classes.FV Data.Fin.Fin
- Rebound.Classes: instance Rebound.Classes.FV t => Rebound.Classes.FV (Data.Scoped.List.List t)
- Rebound.Classes: instance Rebound.Classes.PatEq () ()
- Rebound.Classes: instance Rebound.Classes.PatEq (Data.Type.Nat.SNat n1) (Data.Type.Nat.SNat n2)
- Rebound.Classes: instance Rebound.Classes.PatEq Data.LocalName.LocalName Data.LocalName.LocalName
- Rebound.Classes: instance Rebound.Classes.Sized ()
- Rebound.Classes: instance Rebound.Classes.Sized (Data.Type.Nat.SNat n)
- Rebound.Classes: instance Rebound.Classes.Sized (Data.Vec.Lazy.Vec n a)
- Rebound.Classes: instance Rebound.Classes.Sized Data.LocalName.LocalName
- Rebound.Classes: instance Rebound.Classes.Strengthen Data.Fin.Fin
- Rebound.Classes: instance Rebound.Classes.Strengthen t => Rebound.Classes.Strengthen (Data.Scoped.List.List t)
- Rebound.Classes: patEq :: PatEq t1 t2 => t1 -> t2 -> Maybe (Size t1 :~: Size t2)
- Rebound.Classes: rescope :: forall (n :: Nat) (k :: Nat). SNat k -> Set (Fin (k + n)) -> Set (Fin n)
- Rebound.Classes: shift :: forall (k :: Nat) (n :: Nat). Shiftable t => SNat k -> t n -> t (k + n)
- Rebound.Classes: size :: Sized t => t -> SNat (Size t)
- Rebound.Classes: strengthen :: forall (n :: Nat) t. (Strengthen t, SNatI n) => t ('S n) -> Maybe (t n)
- Rebound.Classes: strengthenN :: forall (m :: Nat) (n :: Nat) t. (Strengthen t, SNatI n) => SNat m -> t (m + n) -> Maybe (t n)
- Rebound.Classes: strengthenOneRec :: forall (k :: Nat) (n :: Nat). Strengthen t => SNat k -> SNat n -> t (k + 'S n) -> Maybe (t (k + n))
- Rebound.Classes: strengthenRec :: forall (k :: Nat) (m :: Nat) (n :: Nat). Strengthen t => SNat k -> SNat m -> SNat n -> t (k + (m + n)) -> Maybe (t (k + n))
- Rebound.Classes: type Size t :: Nat;
- Rebound.Classes: }
- Rebound.Context: (+++) :: forall v (n :: Nat). SubstVar v => Ctx v n -> v n -> Ctx v ('S n)
- Rebound.Context: (++++) :: forall (v :: Nat -> Type) (n :: Nat) (n' :: Nat) (m :: Nat). (SNatI n', SubstVar v) => Env v n m -> Env v n' (n' + m) -> Env v (n' + n) (n' + m)
- Rebound.Context: emptyC :: forall (v :: Nat -> Type). Ctx v N0
- Rebound.Context: instance GHC.Show.Show (Rebound.Context.Exp n)
- Rebound.Context: instance Rebound.Env.Lazy.Subst Rebound.Context.Exp Rebound.Context.Exp
- Rebound.Context: instance Rebound.Env.Lazy.SubstVar Rebound.Context.Exp
- Rebound.Context: type Ctx (v :: Nat -> Type) (n :: Nat) = Env v n n
- Rebound.Env: ($dmapplyE) :: forall (m :: Nat) (n :: Nat). (Subst v c, Generic1 c, GSubst v (Rep1 c), SubstVar v) => Env v m n -> c m -> c n
- Rebound.Env: (.++) :: forall (p :: Nat) (v :: Nat -> Type) (n :: Nat) (m :: Nat). (SNatI p, SubstVar v) => Env v p n -> Env v m n -> Env v (p + m) n
- Rebound.Env: (.:) :: forall v (m :: Nat) (n :: Nat). v m -> Env v n m -> Env v ('S n) m
- Rebound.Env: (.>>) :: forall (v :: Nat -> Type) (p :: Nat) (n :: Nat) (m :: Nat). Subst v v => Env v p n -> Env v n m -> Env v p m
- Rebound.Env: appendE :: forall (v :: Nat -> Type) (p :: Nat) (n :: Nat) (m :: Nat). SubstVar v => SNat p -> Env v p n -> Env v m n -> Env v (p + m) n
- Rebound.Env: applyE :: forall (n :: Nat) (m :: Nat). Subst v c => Env v n m -> c n -> c m
- Rebound.Env: applyEnv :: forall a (n :: Nat) (m :: Nat). SubstVar a => Env a n m -> Fin n -> a m
- Rebound.Env: applyOpt :: forall (v :: Nat -> Type) (n :: Nat) (m :: Nat) c. (Env v n m -> c n -> c m) -> Env v n m -> c n -> c m
- Rebound.Env: class GSubst (v :: Nat -> Type) (e :: Nat -> Type)
- Rebound.Env: class Shiftable (t :: Nat -> Type)
- Rebound.Env: class SubstVar v => Subst (v :: Nat -> Type) (c :: Nat -> Type)
- Rebound.Env: class Subst v v => SubstVar (v :: Nat -> Type)
- Rebound.Env: data Env (a :: Nat -> Type) (n :: Nat) (m :: Nat)
- Rebound.Env: fromTable :: forall (n :: Nat) v. (SNatI n, SubstVar v) => [(Fin n, v n)] -> Env v n n
- Rebound.Env: fromVec :: forall v (m :: Nat) (n :: Nat). SubstVar v => Vec m (v n) -> Env v m n
- Rebound.Env: gapplyE :: forall c (v :: Nat -> Type) (m :: Nat) (n :: Nat). (Generic1 c, GSubst v (Rep1 c), Subst v c) => Env v m n -> c m -> c n
- Rebound.Env: gsubst :: forall (m :: Nat) (n :: Nat). GSubst v e => Env v m n -> e m -> e n
- Rebound.Env: head :: forall v (n :: Nat) (m :: Nat). SubstVar v => Env v ('S n) m -> v m
- Rebound.Env: idE :: forall (v :: Nat -> Type) (n :: Nat). SubstVar v => Env v n n
- Rebound.Env: instance (Data.Type.Nat.SNatI n, GHC.Show.Show (v m), Rebound.Env.Lazy.SubstVar v) => GHC.Show.Show (Rebound.Env.Lazy.Env v n m)
- Rebound.Env: instance Rebound.Classes.Shiftable Data.Fin.Fin
- Rebound.Env: instance Rebound.Env.Lazy.GSubst b Data.Fin.Fin
- Rebound.Env: instance Rebound.Env.Lazy.Subst Data.Fin.Fin Data.Fin.Fin
- Rebound.Env: instance Rebound.Env.Lazy.Subst v t => Rebound.Env.Lazy.Subst v (Data.Scoped.List.List t)
- Rebound.Env: instance Rebound.Env.Lazy.SubstVar Data.Fin.Fin
- Rebound.Env: instance Rebound.Env.Lazy.SubstVar v => Rebound.Env.Lazy.Subst v Data.Fin.Fin
- Rebound.Env: isVar :: forall (n :: Nat). Subst v c => c n -> Maybe (v :~: c, Fin n)
- Rebound.Env: oneE :: forall v (n :: Nat). SubstVar v => v n -> Env v ('S 'Z) n
- Rebound.Env: shift :: forall (k :: Nat) (n :: Nat). Shiftable t => SNat k -> t n -> t (k + n)
- Rebound.Env: shift1E :: forall (v :: Nat -> Type) (n :: Nat). SubstVar v => Env v n ('S n)
- Rebound.Env: shiftFromApplyE :: forall (v :: Nat -> Type) c (k :: Nat) (n :: Nat). (SubstVar v, Subst v c) => SNat k -> c n -> c (k + n)
- Rebound.Env: shiftNE :: forall (v :: Nat -> Type) (m :: Nat) (n :: Nat). (SubstVar v, SubstVar v) => SNat m -> Env v n (m + n)
- Rebound.Env: singletonE :: forall v (n :: Nat). SubstVar v => v n -> Env v ('S n) n
- Rebound.Env: tabulate :: forall (n :: Nat) v (m :: Nat). (SNatI n, Subst v v) => Env v n m -> [(Fin n, v m)]
- Rebound.Env: tail :: forall (v :: Nat -> Type) (n :: Nat) (m :: Nat). SubstVar v => Env v ('S n) m -> Env v n m
- Rebound.Env: toVec :: forall v (m :: Nat) (n :: Nat). SubstVar v => SNat m -> Env v m n -> Vec m (v n)
- Rebound.Env: transform :: forall b a (n :: Nat) (m :: Nat). SubstVar b => (forall (m1 :: Nat). () => a m1 -> b m1) -> Env a n m -> Env b n m
- Rebound.Env: up :: forall (v :: Nat -> Type) (m :: Nat) (n :: Nat). SubstVar v => Env v m n -> Env v ('S m) ('S n)
- Rebound.Env: upN :: forall (v :: Nat -> Type) (p :: Nat) (m :: Nat) (n :: Nat). Subst v v => SNat p -> Env v m n -> Env v (p + m) (p + n)
- Rebound.Env: var :: forall (n :: Nat). SubstVar v => Fin n -> v n
- Rebound.Env: weakenE' :: forall (m :: Nat) (v :: Nat -> Type) (n :: Nat). SubstVar v => SNat m -> Env v n (m + n)
- Rebound.Env: weakenER :: forall (m :: Nat) (v :: Nat -> Type) (n :: Nat). SubstVar v => SNat m -> Env v n (n + m)
- Rebound.Env: zeroE :: forall (v :: Nat -> Type) (n :: Nat). Env v 'Z n
- Rebound.Lib: [:::] :: forall a (n1 :: Nat). a -> Vec n1 a -> Vec ('S n1) a
- Rebound.Lib: [FS] :: forall (n1 :: Nat). Fin n1 -> Fin ('S n1)
- Rebound.Lib: [FZ] :: forall (n1 :: Nat). Fin ('S n1)
- Rebound.Lib: [VNil] :: forall a. Vec 'Z a
- Rebound.Lib: class ToInt a
- Rebound.Lib: data Fin (n :: Nat)
- Rebound.Lib: data Vec (n :: Nat) a
- Rebound.Lib: infixr 5 :::
- Rebound.Lib: toInt :: ToInt a => a -> Int
- Rebound.Lib: type Type = TYPE LiftedRep
- Rebound.MonadNamed: LocalName :: String -> LocalName
- Rebound.MonadNamed: [name] :: LocalName -> String
- Rebound.MonadNamed: class forall (n :: k). () => Monad m n => MonadScopedReader (e :: k -> Type) (m :: k -> Type -> Type) | m -> e
- Rebound.MonadNamed: class Sized t where {
- Rebound.MonadNamed: data Scope name (n :: Nat)
- Rebound.MonadNamed: instance GHC.Classes.Eq name => GHC.Classes.Eq (Rebound.MonadNamed.Scope name n)
- Rebound.MonadNamed: instance GHC.Show.Show name => GHC.Show.Show (Rebound.MonadNamed.Scope name n)
- Rebound.MonadNamed: newtype LocalName
- Rebound.MonadNamed: push :: forall name m (n :: Nat) a. MonadScopedReader (Scope name) m => name -> m ('S n) a -> m n a
- Rebound.MonadNamed: pushVec :: forall name m (p :: Nat) (n :: Nat) a. MonadScopedReader (Scope name) m => Vec p name -> m (p + n) a -> m n a
- Rebound.MonadNamed: runScopedReader :: forall (n :: Nat) name a. ScopedReader name n a -> Vec n name -> a
- Rebound.MonadNamed: runScopedReaderT :: forall {k1} m (n :: Nat) name (a :: k1). ScopedReaderT name m n a -> Vec n name -> m a
- Rebound.MonadNamed: scope :: forall name m (n :: Nat). MonadScopedReader (Scope name) m => m n (Vec n name)
- Rebound.MonadNamed: size :: Sized t => t -> SNat (Size t)
- Rebound.MonadNamed: type ScopedReader name (n :: Nat) a = ScopedReader Scope name n a
- Rebound.MonadNamed: type ScopedReaderT name (m :: k1 -> Type) (n :: Nat) (a :: k1) = ScopedReaderT Scope name m n a
- Rebound.MonadNamed: type Size t :: Nat;
- Rebound.MonadNamed: }
- Rebound.MonadScoped: ScopedReaderT :: (e n -> m a) -> ScopedReaderT (e :: k -> Type) (m :: k1 -> Type) (n :: k) (a :: k1)
- Rebound.MonadScoped: ScopedStateT :: (s n -> m (a, s n)) -> ScopedStateT (s :: k -> Type) (m :: Type -> Type) (n :: k) a
- Rebound.MonadScoped: [runScopedReaderT] :: ScopedReaderT (e :: k -> Type) (m :: k1 -> Type) (n :: k) (a :: k1) -> e n -> m a
- Rebound.MonadScoped: [runScopedStateT] :: ScopedStateT (s :: k -> Type) (m :: Type -> Type) (n :: k) a -> s n -> m (a, s n)
- Rebound.MonadScoped: askS :: forall (n :: k). MonadScopedReader e m => m n (e n)
- Rebound.MonadScoped: asksS :: forall {k} e m (n :: k) a. MonadScopedReader e m => (e n -> a) -> m n a
- Rebound.MonadScoped: class forall (n :: k). () => Monad m n => MonadScopedReader (e :: k -> Type) (m :: k -> Type -> Type) | m -> e
- Rebound.MonadScoped: class forall (n :: k). () => Monad m n => MonadScopedState (s :: k -> Type) (m :: k -> Type -> Type) | m -> s
- Rebound.MonadScoped: evalScopedState :: forall {k} s (n :: k) a. ScopedState s n a -> s n -> a
- Rebound.MonadScoped: evalScopedStateT :: forall {k} m s (n :: k) a. Functor m => ScopedStateT s m n a -> s n -> m a
- Rebound.MonadScoped: execScopedState :: forall {k} s (n :: k) a. ScopedState s n a -> s n -> s n
- Rebound.MonadScoped: execScopedStateT :: forall {k} m s (n :: k) a. Functor m => ScopedStateT s m n a -> s n -> m (s n)
- Rebound.MonadScoped: getS :: forall (n :: k). MonadScopedState s m => m n (s n)
- Rebound.MonadScoped: getsS :: forall {k} s m (n :: k) a. MonadScopedState s m => (s n -> a) -> m n a
- Rebound.MonadScoped: instance forall k (e :: k -> *) (m :: * -> *) (n :: k). GHC.Base.Functor m => GHC.Base.Functor (Rebound.MonadScoped.ScopedReaderT e m n)
- Rebound.MonadScoped: instance forall k (m :: * -> *) (e :: k -> *) (n :: k). GHC.Base.Applicative m => GHC.Base.Applicative (Rebound.MonadScoped.ScopedReaderT e m n)
- Rebound.MonadScoped: instance forall k (m :: * -> *) (e :: k -> *) (n :: k). GHC.Base.Monad m => GHC.Base.Monad (Rebound.MonadScoped.ScopedReaderT e m n)
- Rebound.MonadScoped: instance forall k (m :: * -> *) (e :: k -> *). GHC.Base.Monad m => Rebound.MonadScoped.MonadScopedReader e (Rebound.MonadScoped.ScopedReaderT e m)
- Rebound.MonadScoped: instance forall k (m :: * -> *) (s :: k -> *) (n :: k). GHC.Base.Monad m => GHC.Base.Applicative (Rebound.MonadScoped.ScopedStateT s m n)
- Rebound.MonadScoped: instance forall k (m :: * -> *) (s :: k -> *) (n :: k). GHC.Base.Monad m => GHC.Base.Monad (Rebound.MonadScoped.ScopedStateT s m n)
- Rebound.MonadScoped: instance forall k (m :: * -> *) (s :: k -> *). GHC.Base.Monad m => Rebound.MonadScoped.MonadScopedState s (Rebound.MonadScoped.ScopedStateT s m)
- Rebound.MonadScoped: instance forall k (s :: k -> *) (m :: * -> *) (n :: k). GHC.Base.Functor m => GHC.Base.Functor (Rebound.MonadScoped.ScopedStateT s m n)
- Rebound.MonadScoped: instance forall k e (m :: * -> *) (se :: k -> *) (n :: k). Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Rebound.MonadScoped.ScopedReaderT se m n)
- Rebound.MonadScoped: instance forall k e (m :: * -> *) (se :: k -> *) (n :: k). Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Rebound.MonadScoped.ScopedStateT se m n)
- Rebound.MonadScoped: instance forall k r (m :: * -> *) (e :: k -> *) (n :: k). Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Rebound.MonadScoped.ScopedReaderT e m n)
- Rebound.MonadScoped: instance forall k r (m :: * -> *) (s :: k -> *) (n :: k). Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Rebound.MonadScoped.ScopedStateT s m n)
- Rebound.MonadScoped: instance forall k w (m :: * -> *) (e :: k -> *) (n :: k). Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Rebound.MonadScoped.ScopedReaderT e m n)
- Rebound.MonadScoped: instance forall k w (m :: * -> *) (s :: k -> *) (n :: k). Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Rebound.MonadScoped.ScopedStateT s m n)
- Rebound.MonadScoped: localS :: forall (n :: k) (n' :: k) a. MonadScopedReader e m => (e n -> e n') -> m n' a -> m n a
- Rebound.MonadScoped: modifyS :: forall {k} s m (n :: k). MonadScopedState s m => (s n -> s n) -> m n ()
- Rebound.MonadScoped: newtype ScopedReaderT (e :: k -> Type) (m :: k1 -> Type) (n :: k) (a :: k1)
- Rebound.MonadScoped: newtype ScopedStateT (s :: k -> Type) (m :: Type -> Type) (n :: k) a
- Rebound.MonadScoped: putS :: forall (n :: k). MonadScopedState s m => s n -> m n ()
- Rebound.MonadScoped: readerS :: forall (n :: k) a. MonadScopedReader e m => (e n -> a) -> m n a
- Rebound.MonadScoped: rescope :: forall (n :: k) (n' :: k) a. MonadScopedState s m => (s n -> s n') -> (s n' -> s n) -> m n' a -> m n a
- Rebound.MonadScoped: runScopedReader :: forall {k} e (n :: k) a. ScopedReader e n a -> e n -> a
- Rebound.MonadScoped: stateS :: forall (n :: k) a. MonadScopedState s m => (s n -> (a, s n)) -> m n a
- Rebound.MonadScoped: type ScopedReader (e :: k -> Type) (n :: k) a = ScopedReaderT e Identity n a
- Rebound.MonadScoped: type ScopedState (s :: k -> Type) (n :: k) a = ScopedStateT s Identity n a
- Rebound.Refinement: Refinement :: Map (Fin n) (v n) -> Refinement (v :: Nat -> Type) (n :: Nat)
- Rebound.Refinement: domain :: forall (v :: Nat -> Type) (n :: Nat). Refinement v n -> [Fin n]
- Rebound.Refinement: emptyR :: forall (v :: Nat -> Type) (n :: Nat). Refinement v n
- Rebound.Refinement: fromEnvironment :: forall (n :: Nat) (v :: Nat -> Type). (SNatI n, SubstVar v) => Env v n n -> Refinement v n
- Rebound.Refinement: instance Rebound.Classes.Shiftable v => Rebound.Classes.Shiftable (Rebound.Refinement.Refinement v)
- Rebound.Refinement: joinR :: forall (v :: Nat -> Type) (n :: Nat). (SNatI n, Subst v v, Eq (v n)) => Refinement v n -> Refinement v n -> Maybe (Refinement v n)
- Rebound.Refinement: newtype Refinement (v :: Nat -> Type) (n :: Nat)
- Rebound.Refinement: refine :: forall (n :: Nat) (v :: Nat -> Type) c. (SNatI n, Subst v c) => Refinement v n -> c n -> c n
- Rebound.Refinement: singletonR :: forall v (n :: Nat). (SubstVar v, Eq (v n)) => (Fin n, v n) -> Refinement v n
- Rebound.Refinement: toEnvironment :: forall (n :: Nat) (v :: Nat -> Type). (SNatI n, SubstVar v) => Refinement v n -> Env v n n
+ DepMatch: Annot :: Exp n -> Exp n -> Exp (n :: Nat)
+ DepMatch: App :: Exp n -> Exp n -> Exp (n :: Nat)
+ DepMatch: Branch :: Bind Exp Exp (Pat p) n -> Branch (n :: Nat)
+ DepMatch: Match :: List Branch n -> Exp (n :: Nat)
+ DepMatch: Pair :: Exp n -> Exp n -> Exp (n :: Nat)
+ DepMatch: Pi :: Exp n -> Bind1 Exp Exp n -> Exp (n :: Nat)
+ DepMatch: Sigma :: Exp n -> Bind1 Exp Exp n -> Exp (n :: Nat)
+ DepMatch: Star :: Exp (n :: Nat)
+ DepMatch: Var :: Fin n -> Exp (n :: Nat)
+ DepMatch: [AnnotationNeededPat] :: forall (p1 :: Nat) (n1 :: Nat). Pat p1 n1 -> Err
+ DepMatch: [AnnotationNeeded] :: forall (n :: Nat). Exp n -> Err
+ DepMatch: [NotEqual] :: forall (n :: Nat). Exp n -> Exp n -> Err
+ DepMatch: [PAnnot] :: forall (p :: Nat) (n :: Nat). Pat p n -> Exp n -> Pat p n
+ DepMatch: [PPair] :: forall (p1 :: Nat) (n :: Nat) (p2 :: Nat). Pat p1 n -> Pat p2 (p1 + n) -> Pat (p2 + p1) n
+ DepMatch: [PVar] :: forall (n :: Nat). Pat ('S N0) n
+ DepMatch: [PatternMismatch] :: forall (p1 :: Nat) (n1 :: Nat) (p2 :: Nat) (n2 :: Nat). Pat p1 n1 -> Pat p2 n2 -> Err
+ DepMatch: [PatternTypeMismatch] :: forall (p1 :: Nat) (n1 :: Nat). Pat p1 n1 -> Exp n1 -> Err
+ DepMatch: [PiExpectedPat] :: forall (p1 :: Nat) (n1 :: Nat). Pat p1 n1 -> Err
+ DepMatch: [PiExpected] :: forall (n :: Nat). Exp n -> Err
+ DepMatch: [SigmaExpected] :: forall (n :: Nat). Exp n -> Err
+ DepMatch: [VarEscapes] :: forall (n :: Nat). Exp n -> Err
+ DepMatch: alam :: forall (n :: Nat). Exp n -> Exp ('S n) -> Exp n
+ DepMatch: checkBranch :: forall m (n :: Nat). MonadError Err m => Ctx Exp n -> Exp n -> Branch n -> m ()
+ DepMatch: checkPattern :: forall m (n :: Nat) (p :: Nat). MonadError Err m => Ctx Exp n -> Pat p n -> Exp n -> m (Ctx Exp (p + n), Exp (p + n))
+ DepMatch: checkType :: forall m (n :: Nat). MonadError Err m => Ctx Exp n -> Exp n -> Exp n -> m ()
+ DepMatch: data Branch (n :: Nat)
+ DepMatch: data Err
+ DepMatch: data Exp (n :: Nat)
+ DepMatch: data Pat (p :: Nat) (n :: Nat)
+ DepMatch: equate :: forall m (n :: Nat). MonadError Err m => Exp n -> Exp n -> m ()
+ DepMatch: equateBranch :: forall m (n :: Nat). MonadError Err m => Branch n -> Branch n -> m ()
+ DepMatch: equatePat :: forall m (p1 :: Nat) (n :: Nat) (p2 :: Nat). MonadError Err m => Pat p1 n -> Pat p2 n -> m ()
+ DepMatch: equateWHNF :: forall m (n :: Nat). MonadError Err m => Exp n -> Exp n -> m ()
+ DepMatch: eval :: forall (n :: Nat). Exp n -> Exp n
+ DepMatch: eval' :: forall (n :: Nat). Exp n -> Exp n
+ DepMatch: findBranch :: forall (n :: Nat). Exp n -> List Branch n -> Maybe (Exp n)
+ DepMatch: inferPattern :: forall m (n :: Nat) (p :: Nat). MonadError Err m => Ctx Exp n -> Pat p n -> m (Ctx Exp (p + n), Exp (p + n), Exp n)
+ DepMatch: inferType :: forall m (n :: Nat). MonadError Err m => Ctx Exp n -> Exp n -> m (Exp n)
+ DepMatch: instance GHC.Classes.Eq (DepMatch.Branch n)
+ DepMatch: instance GHC.Classes.Eq (DepMatch.Exp n)
+ DepMatch: instance GHC.Generics.Generic1 DepMatch.Exp
+ DepMatch: instance GHC.Show.Show (DepMatch.Branch b)
+ DepMatch: instance GHC.Show.Show (DepMatch.Exp n)
+ DepMatch: instance GHC.Show.Show (DepMatch.Pat p n)
+ DepMatch: instance GHC.Show.Show DepMatch.Err
+ DepMatch: instance Rebound.Bind.Scoped.ScopedSized (DepMatch.Pat p)
+ DepMatch: instance Rebound.Classes.FV (DepMatch.Pat p)
+ DepMatch: instance Rebound.Classes.FV DepMatch.Branch
+ DepMatch: instance Rebound.Classes.FV DepMatch.Exp
+ DepMatch: instance Rebound.Classes.PatEq (DepMatch.Pat p1 n) (DepMatch.Pat p2 n)
+ DepMatch: instance Rebound.Classes.Shiftable (DepMatch.Pat p)
+ DepMatch: instance Rebound.Classes.Shiftable DepMatch.Branch
+ DepMatch: instance Rebound.Classes.Shiftable DepMatch.Exp
+ DepMatch: instance Rebound.Classes.Sized (DepMatch.Pat p n)
+ DepMatch: instance Rebound.Classes.Strengthen (DepMatch.Pat p)
+ DepMatch: instance Rebound.Classes.Strengthen DepMatch.Branch
+ DepMatch: instance Rebound.Classes.Strengthen DepMatch.Exp
+ DepMatch: instance Rebound.Env.Lazy.Subst DepMatch.Exp (DepMatch.Pat p)
+ DepMatch: instance Rebound.Env.Lazy.Subst DepMatch.Exp DepMatch.Branch
+ DepMatch: instance Rebound.Env.Lazy.Subst DepMatch.Exp DepMatch.Exp
+ DepMatch: instance Rebound.Env.Lazy.SubstVar DepMatch.Exp
+ DepMatch: lam :: forall (n :: Nat). Exp ('S n) -> Exp n
+ DepMatch: pat0 :: Pat N2 N0
+ DepMatch: patternMatch :: forall (p :: Nat) (n :: Nat). Pat p n -> Exp n -> Maybe (Env Exp p n)
+ DepMatch: sigmaExample :: Exp ('S 'Z)
+ DepMatch: star :: forall (n :: Nat). Exp n
+ DepMatch: step :: forall (n :: Nat). Exp n -> Maybe (Exp n)
+ DepMatch: t0 :: Exp 'Z
+ DepMatch: t00 :: Exp N2
+ DepMatch: t01 :: Exp N2
+ DepMatch: t1 :: Exp 'Z
+ DepMatch: tm0 :: Exp 'Z
+ DepMatch: tmEx :: Exp 'Z
+ DepMatch: tmid :: forall {n :: Nat}. Exp n
+ DepMatch: ty0 :: Exp 'Z
+ DepMatch: tyEx :: Exp 'Z
+ DepMatch: tyid :: forall {n :: Nat}. Exp n
+ DepMatch: whnf :: forall (n :: Nat). Exp n -> Exp n
+ HOAS: P :: Fin b -> Proxy (b :: Nat)
+ HOAS: [App] :: forall (a :: Nat). Tm a -> Tm a -> Tm a
+ HOAS: [Lam] :: forall (a :: Nat). (Proxy ('S a) -> Tm ('S a)) -> Tm a
+ HOAS: [Var] :: forall (b :: Nat) (a :: Nat). b ⊆ a => Proxy b -> Tm a
+ HOAS: app :: Tm 'Z
+ HOAS: class (b :: Nat) ⊆ (a :: Nat)
+ HOAS: class Cvt (t :: k -> Type) (u :: k -> Type) | t -> u
+ HOAS: cvt :: forall (m :: k). Cvt t u => t m -> u m
+ HOAS: cvtBind :: forall (v :: Nat -> Type) (u :: Nat -> Type) t (a :: Nat). (Subst v u, Cvt t u) => (Proxy ('S a) -> t ('S a)) -> Bind v u a
+ HOAS: cvtVar :: forall (b :: Nat) (a :: Nat). b ⊆ a => Proxy b -> Fin a
+ HOAS: data Tm (a :: Nat)
+ HOAS: fls :: Tm 'Z
+ HOAS: inj :: (⊆) b a => Fin b -> Fin a
+ HOAS: instance (o GHC.Types.~ 'Data.Nat.S n, m HOAS.⊆ n) => m HOAS.⊆ o
+ HOAS: instance HOAS.Cvt HOAS.Tm LC.Exp
+ HOAS: instance n HOAS.⊆ n
+ HOAS: newtype Proxy (b :: Nat)
+ HOAS: omega :: Tm 'Z
+ HOAS: tru :: Tm 'Z
+ HOAS: zeroVar :: forall (b :: Nat). Proxy ('S b)
+ LC: (@@) :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ LC: [App] :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ LC: [Lam] :: forall (n :: Nat). Bind Exp Exp n -> Exp n
+ LC: [Var] :: forall (n :: Nat). Fin n -> Exp n
+ LC: data Exp (n :: Nat)
+ LC: eval :: Exp 'Z -> Exp 'Z
+ LC: eval' :: forall (n :: Nat). Int -> Exp n -> Maybe (Exp n)
+ LC: instance GHC.Classes.Eq (LC.Exp n)
+ LC: instance GHC.Generics.Generic1 LC.Exp
+ LC: instance GHC.Show.Show (LC.Exp n)
+ LC: instance Rebound.Env.Lazy.Subst LC.Exp LC.Exp
+ LC: instance Rebound.Env.Lazy.SubstVar LC.Exp
+ LC: lam :: forall (n :: Nat). Exp ('S n) -> Exp n
+ LC: nf :: forall (n :: Nat). Exp n -> Exp n
+ LC: nf1 :: forall (n :: Nat). Exp n -> Exp n
+ LC: nfEnv :: forall (n :: Nat). Exp n -> Exp n
+ LC: step :: forall (n :: Nat). Exp n -> Maybe (Exp n)
+ LC: t :: Exp 'Z
+ LC: t0 :: Exp 'Z
+ LC: t2 :: forall {n :: Nat}. Exp n
+ LC: v0 :: forall (n :: Nat). Exp ('S n)
+ LC: v1 :: forall (n :: Nat). Exp ('S ('S n))
+ LC: whnf :: forall (n :: Nat). Exp n -> Exp n
+ LC: whnfEnv :: forall (m :: Nat) (n :: Nat). Env Exp m n -> Exp m -> Exp n
+ LCLet: (@@) :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ LCLet: MutRec :: Vec m (BindN Exp Exp m n) -> BindN Exp Exp m n -> MutRec (n :: Nat)
+ LCLet: Rec :: Bind Exp Exp n -> Bind Exp Exp n -> Rec (n :: Nat)
+ LCLet: [App] :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ LCLet: [Body] :: forall (n :: Nat). Exp n -> Tele n
+ LCLet: [Lam] :: forall (n :: Nat). Bind Exp Exp n -> Exp n
+ LCLet: [LetMutRec] :: forall (n :: Nat). MutRec n -> Exp n
+ LCLet: [LetRec] :: forall (n :: Nat). Rec n -> Exp n
+ LCLet: [LetStar] :: forall (n :: Nat). Exp n -> Bind Exp Tele n -> Tele n
+ LCLet: [LetTele] :: forall (n :: Nat). Tele n -> Exp n
+ LCLet: [Let] :: forall (n :: Nat). Exp n -> Bind Exp Exp n -> Exp n
+ LCLet: [Var] :: forall (n :: Nat). Fin n -> Exp n
+ LCLet: [mutrec_body] :: MutRec (n :: Nat) -> BindN Exp Exp m n
+ LCLet: [mutrec_rhss] :: MutRec (n :: Nat) -> Vec m (BindN Exp Exp m n)
+ LCLet: [rec_body] :: Rec (n :: Nat) -> Bind Exp Exp n
+ LCLet: [rec_rhs] :: Rec (n :: Nat) -> Bind Exp Exp n
+ LCLet: data Exp (n :: Nat)
+ LCLet: data MutRec (n :: Nat)
+ LCLet: data Rec (n :: Nat)
+ LCLet: data Tele (n :: Nat)
+ LCLet: eval :: forall (n :: Nat). Exp n -> Exp n
+ LCLet: evalTele :: forall (n :: Nat). Tele n -> Exp n
+ LCLet: instance GHC.Classes.Eq (LCLet.Exp n)
+ LCLet: instance GHC.Classes.Eq (LCLet.MutRec n)
+ LCLet: instance GHC.Classes.Eq (LCLet.Rec n)
+ LCLet: instance GHC.Classes.Eq (LCLet.Tele n)
+ LCLet: instance GHC.Show.Show (LCLet.Exp n)
+ LCLet: instance Rebound.Classes.Shiftable LCLet.Exp
+ LCLet: instance Rebound.Classes.Shiftable LCLet.Tele
+ LCLet: instance Rebound.Env.Lazy.Subst LCLet.Exp LCLet.Exp
+ LCLet: instance Rebound.Env.Lazy.Subst LCLet.Exp LCLet.MutRec
+ LCLet: instance Rebound.Env.Lazy.Subst LCLet.Exp LCLet.Rec
+ LCLet: instance Rebound.Env.Lazy.Subst LCLet.Exp LCLet.Tele
+ LCLet: instance Rebound.Env.Lazy.SubstVar LCLet.Exp
+ LCLet: lam :: forall (n :: Nat). Exp ('S n) -> Exp n
+ LCLet: letrec :: forall (n :: Nat). Exp ('S n) -> Exp ('S n) -> Exp n
+ LCLet: letstar :: forall (n :: Nat). Exp n -> Tele ('S n) -> Tele n
+ LCLet: t0 :: forall {n :: Nat}. Exp n
+ LCLet: t1 :: Exp 'Z
+ LCLet: t2 :: Exp 'Z
+ LCLet: t3 :: Exp 'Z
+ LCLet: t4 :: forall {n :: Nat}. Exp n
+ LCLet: v0 :: forall (n :: Nat). Exp ('S n)
+ LCLet: v1 :: forall (n :: Nat). Exp ('S ('S n))
+ LCLet: v2 :: forall (n :: Nat). Exp ('S ('S ('S n)))
+ LCQC: genExp :: forall (n :: Nat). SNat n -> Int -> Gen (Exp n)
+ LCQC: instance Data.Type.Nat.SNatI n => Test.QuickCheck.Arbitrary.Arbitrary (LC.Exp n)
+ LCQC: prop_nf1 :: Exp 'Z -> Property
+ LCQC: prop_nfEnv :: Exp 'Z -> Property
+ LCQC: prop_normalize :: forall (n :: Nat). (Exp n -> Exp n) -> Exp n -> Property
+ LCQC: shrinkExp :: forall (n :: Nat). SNatI n => Exp n -> [Exp n]
+ LinLC: (<<) :: Monad m => m a -> m b -> m a
+ LinLC: (@@) :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ LinLC: (~>) :: Ty -> Ty -> Ty
+ LinLC: TCEnv :: Vec n Ty -> Vec n Usage -> TCEnv (n :: Nat)
+ LinLC: [App] :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ LinLC: [CUnit] :: forall (n :: Nat). Exp n
+ LinLC: [Lam] :: forall (n :: Nat). Bind Exp Exp n -> Exp n
+ LinLC: [TyArrow] :: Ty -> Ty -> Ty
+ LinLC: [TyUnit] :: Ty
+ LinLC: [Unused] :: Usage
+ LinLC: [Used] :: Usage
+ LinLC: [Var] :: forall (n :: Nat). Fin n -> Exp n
+ LinLC: [types] :: TCEnv (n :: Nat) -> Vec n Ty
+ LinLC: [usages] :: TCEnv (n :: Nat) -> Vec n Usage
+ LinLC: addBinder :: forall (n :: Nat) a. Ty -> TC ('S n) a -> TC n a
+ LinLC: checkType :: forall (n :: Nat). Exp n -> Ty -> TC n ()
+ LinLC: consumeVar :: forall (n :: Nat). Fin n -> TC n Ty
+ LinLC: data Exp (n :: Nat)
+ LinLC: data TCEnv (n :: Nat)
+ LinLC: data Ty
+ LinLC: data Usage
+ LinLC: inferType :: forall (n :: Nat). Exp n -> TC n Ty
+ LinLC: infixr 8 ~>
+ LinLC: instance GHC.Classes.Eq (LinLC.Exp n)
+ LinLC: instance GHC.Classes.Eq LinLC.Ty
+ LinLC: instance GHC.Classes.Eq LinLC.Usage
+ LinLC: instance GHC.Generics.Generic1 LinLC.Exp
+ LinLC: instance GHC.Show.Show LinLC.Ty
+ LinLC: instance GHC.Show.Show LinLC.Usage
+ LinLC: instance Rebound.Env.Lazy.Subst LinLC.Exp LinLC.Exp
+ LinLC: instance Rebound.Env.Lazy.SubstVar LinLC.Exp
+ LinLC: lam :: forall (n :: Nat). Exp ('S n) -> Exp n
+ LinLC: runTC :: forall (n :: Nat) a. SNatI n => Vec n Ty -> TC n a -> Either String a
+ LinLC: type TC (n :: Nat) a = ScopedStateT TCEnv Except String n a
+ LinLC: v0 :: forall (n :: Nat). Exp ('S n)
+ LinLC: v1 :: forall (n :: Nat). Exp ('S ('S n))
+ PTS: [App] :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ PTS: [Equate] :: forall (n :: Nat). Exp n -> Exp n -> Err
+ PTS: [Lam] :: forall (n :: Nat). Exp n -> Bind1 Exp Exp n -> Exp n
+ PTS: [Pair] :: forall (n :: Nat). Exp n -> Exp n -> Exp n -> Exp n
+ PTS: [PiExpected] :: forall (n :: Nat). Exp n -> Err
+ PTS: [Pi] :: forall (n :: Nat). Exp n -> Bind1 Exp Exp n -> Exp n
+ PTS: [SigmaExpected] :: forall (n :: Nat). Exp n -> Err
+ PTS: [Sigma] :: forall (n :: Nat). Exp n -> Bind1 Exp Exp n -> Exp n
+ PTS: [Split] :: forall (n :: Nat). Exp n -> Bind2 Exp Exp n -> Exp n
+ PTS: [Star] :: forall (n :: Nat). Exp n
+ PTS: [VarEscapes] :: forall (n :: Nat). Exp n -> Err
+ PTS: [Var] :: forall (n :: Nat). Fin n -> Exp n
+ PTS: checkType :: forall (n :: Nat) m. (MonadError Err m, SNatI n) => Ctx Exp n -> Exp n -> Exp n -> m ()
+ PTS: data Err
+ PTS: data Exp (n :: Nat)
+ PTS: equate :: forall m (n :: Nat). MonadError Err m => Exp n -> Exp n -> m ()
+ PTS: equateWHNF :: forall m (n :: Nat). MonadError Err m => Exp n -> Exp n -> m ()
+ PTS: eval :: forall (n :: Nat). Exp n -> Exp n
+ PTS: eval' :: forall (n :: Nat). Exp n -> Exp n
+ PTS: evalEnv :: forall (m :: Nat) (n :: Nat). Env Exp m n -> Exp m -> Exp n
+ PTS: inferType :: forall (n :: Nat) m. (MonadError Err m, SNatI n) => Ctx Exp n -> Exp n -> m (Exp n)
+ PTS: instance GHC.Classes.Eq (PTS.Exp n)
+ PTS: instance GHC.Generics.Generic1 PTS.Exp
+ PTS: instance GHC.Show.Show (PTS.Exp n)
+ PTS: instance GHC.Show.Show PTS.Err
+ PTS: instance Rebound.Classes.FV PTS.Exp
+ PTS: instance Rebound.Classes.Shiftable PTS.Exp
+ PTS: instance Rebound.Classes.Strengthen PTS.Exp
+ PTS: instance Rebound.Env.Lazy.Subst PTS.Exp PTS.Exp
+ PTS: instance Rebound.Env.Lazy.SubstVar PTS.Exp
+ PTS: nf :: forall (n :: Nat). Exp n -> Exp n
+ PTS: norm :: forall (n :: Nat). Exp n -> Exp n
+ PTS: step :: forall (n :: Nat). Exp n -> Maybe (Exp n)
+ PTS: t0 :: Exp 'Z
+ PTS: t00 :: Exp N2
+ PTS: t01 :: Exp N2
+ PTS: t1 :: Exp 'Z
+ PTS: tmid :: forall {n :: Nat}. Exp n
+ PTS: tyid :: forall {n :: Nat}. Exp n
+ PTS: whnf :: forall (n :: Nat). Exp n -> Exp n
+ Pat: [App] :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ Pat: [Branch] :: forall (m :: Nat) (pat :: Nat -> Type) (n :: Nat). SNatI m => Bind Exp Exp (pat m) n -> Branch pat n
+ Pat: [Case] :: forall (n :: Nat). Exp n -> [Branch Pat n] -> Exp n
+ Pat: [Con] :: forall (n :: Nat). String -> Exp n
+ Pat: [Lam] :: forall (n :: Nat). Bind1 Exp Exp n -> Exp n
+ Pat: [LetPair] :: forall (n :: Nat). Exp n -> Branch PairPat n -> Exp n
+ Pat: [PApp] :: forall (m1 :: Nat) (m2 :: Nat). ConApp m1 -> Pat m2 -> ConApp (m2 + m1)
+ Pat: [PCon] :: String -> ConApp 'Z
+ Pat: [PHead] :: forall (m :: Nat). ConApp m -> Pat m
+ Pat: [PPVar] :: PairPat ('S N0)
+ Pat: [PPair] :: forall (m1 :: Nat) (m2 :: Nat). PairPat m1 -> PairPat m2 -> PairPat (m2 + m1)
+ Pat: [PVar] :: Pat ('S N0)
+ Pat: [Var] :: forall (n :: Nat). Fin n -> Exp n
+ Pat: data Branch (pat :: Nat -> Type) (n :: Nat)
+ Pat: data ConApp (m :: Nat)
+ Pat: data Exp (n :: Nat)
+ Pat: data PairPat (m :: Nat)
+ Pat: data Pat (m :: Nat)
+ Pat: e1 :: Exp N0
+ Pat: e2 :: Exp N0
+ Pat: eval :: forall (n :: Nat). Exp n -> Exp n
+ Pat: eval' :: forall (n :: Nat). Exp n -> Exp n
+ Pat: findBranch :: forall (n :: Nat). Exp n -> [Branch Pat n] -> Maybe (Exp n)
+ Pat: instance (forall (m :: Data.Nat.Nat). GHC.Classes.Eq (pat m), forall (m :: Data.Nat.Nat). Rebound.Classes.SizeIndex pat m) => GHC.Classes.Eq (Pat.Branch pat n)
+ Pat: instance GHC.Classes.Eq (Pat.Exp n)
+ Pat: instance GHC.Classes.Eq (Pat.PairPat m)
+ Pat: instance GHC.Classes.Eq (Pat.Pat m)
+ Pat: instance GHC.Show.Show (Pat.Branch Pat.Pat n)
+ Pat: instance GHC.Show.Show (Pat.ConApp m)
+ Pat: instance GHC.Show.Show (Pat.Exp n)
+ Pat: instance GHC.Show.Show (Pat.PairPat m)
+ Pat: instance GHC.Show.Show (Pat.Pat m)
+ Pat: instance Rebound.Classes.PatEq (Pat.ConApp m1) (Pat.ConApp m2)
+ Pat: instance Rebound.Classes.PatEq (Pat.PairPat m1) (Pat.PairPat m2)
+ Pat: instance Rebound.Classes.PatEq (Pat.Pat m1) (Pat.Pat m2)
+ Pat: instance Rebound.Classes.Shiftable (Pat.Branch pat)
+ Pat: instance Rebound.Classes.Shiftable Pat.Exp
+ Pat: instance Rebound.Classes.SizeIndex Pat.PairPat p
+ Pat: instance Rebound.Classes.SizeIndex Pat.Pat p
+ Pat: instance Rebound.Classes.Sized (Pat.ConApp m)
+ Pat: instance Rebound.Classes.Sized (Pat.PairPat m)
+ Pat: instance Rebound.Classes.Sized (Pat.Pat m)
+ Pat: instance Rebound.Env.Lazy.Subst Pat.Exp (Pat.Branch pat)
+ Pat: instance Rebound.Env.Lazy.Subst Pat.Exp Pat.Exp
+ Pat: instance Rebound.Env.Lazy.SubstVar Pat.Exp
+ Pat: nf :: forall (n :: Nat). Exp n -> Exp n
+ Pat: nfBr :: forall (pat :: Nat -> Type) (n :: Nat). (forall (n1 :: Nat). () => Sized (pat n1)) => Branch pat n -> Branch pat n
+ Pat: p1 :: Pat N2
+ Pat: p2 :: Pat N2
+ Pat: patternMatch :: forall (p :: Nat) (m :: Nat). Pat p -> Exp m -> Maybe (Env Exp p m)
+ Pat: patternMatchApp :: forall (p :: Nat) (m :: Nat). ConApp p -> Exp m -> Maybe (Env Exp p m)
+ Pat: ppatternMatch :: forall (p :: Nat) (m :: Nat). PairPat p -> Exp m -> Maybe (Env Exp p m)
+ Pat: step :: forall (n :: Nat). Exp n -> Maybe (Exp n)
+ Pat: t0 :: Exp 'Z
+ Pat: t1 :: Exp 'Z
+ Pat: t2 :: Exp 'Z
+ Pat: t3 :: Exp 'Z
+ Pat: t4 :: Exp 'Z
+ PureSystemF: PpEnv :: Vec n String -> Int -> PpEnv (n :: Nat)
+ PureSystemF: TC :: ScopedReaderT TcEnv (Except Error) n a -> TC (n :: Nat) a
+ PureSystemF: TcEnv :: Vec n LocalName -> Ctx Exp n -> TcEnv (n :: Nat)
+ PureSystemF: [Abs] :: forall (n :: Nat). Ty n -> Bind Exp Exp n -> Exp n
+ PureSystemF: [App] :: forall (n :: Nat). Exp n -> Exp n -> Exp n
+ PureSystemF: [Kind] :: forall (n :: Nat). Exp n
+ PureSystemF: [TAbs] :: forall (n :: Nat). Bind Ty Exp n -> Exp n
+ PureSystemF: [TAll] :: forall (n :: Nat). Bind Ty Ty n -> Exp n
+ PureSystemF: [TApp] :: forall (n :: Nat). Exp n -> Ty n -> Exp n
+ PureSystemF: [TArr] :: forall (n :: Nat). Ty n -> Ty n -> Exp n
+ PureSystemF: [Var] :: forall (n :: Nat). Fin n -> Exp n
+ PureSystemF: [names] :: TcEnv (n :: Nat) -> Vec n LocalName
+ PureSystemF: [pplevel] :: PpEnv (n :: Nat) -> Int
+ PureSystemF: [ppnames] :: PpEnv (n :: Nat) -> Vec n String
+ PureSystemF: [types] :: TcEnv (n :: Nat) -> Ctx Exp n
+ PureSystemF: bbn0 :: Exp 'Z
+ PureSystemF: bbn1 :: Exp 'Z
+ PureSystemF: bbn2 :: Exp 'Z
+ PureSystemF: data Exp (n :: Nat)
+ PureSystemF: data PpEnv (n :: Nat)
+ PureSystemF: data TcEnv (n :: Nat)
+ PureSystemF: emptyEnv :: TcEnv 'Z
+ PureSystemF: ensureType :: forall (n :: Nat). SNatI n => Ty n -> TC n ()
+ PureSystemF: extendE :: forall (n :: Nat). (LocalName, Exp n) -> TcEnv n -> TcEnv ('S n)
+ PureSystemF: get :: forall (n :: Nat). Fin n -> TC n (LocalName, Exp n)
+ PureSystemF: inferType :: forall (n :: Nat). SNatI n => Exp n -> TC n (Ty n)
+ PureSystemF: instance Control.Monad.Error.Class.MonadError PureSystemF.Error (PureSystemF.TC n)
+ PureSystemF: instance GHC.Base.Applicative (PureSystemF.TC n)
+ PureSystemF: instance GHC.Base.Functor (PureSystemF.TC n)
+ PureSystemF: instance GHC.Base.Monad (PureSystemF.TC n)
+ PureSystemF: instance GHC.Classes.Eq (PureSystemF.Exp n)
+ PureSystemF: instance GHC.Show.Show (PureSystemF.Exp 'Data.Nat.Z)
+ PureSystemF: instance Rebound.Classes.Strengthen PureSystemF.Exp
+ PureSystemF: instance Rebound.Env.Lazy.Subst PureSystemF.Exp PureSystemF.Exp
+ PureSystemF: instance Rebound.Env.Lazy.SubstVar PureSystemF.Exp
+ PureSystemF: instance Rebound.MonadScoped.MonadScopedReader PureSystemF.TcEnv PureSystemF.TC
+ PureSystemF: lookupE :: forall (n :: Nat). TcEnv n -> Fin n -> (LocalName, Exp n)
+ PureSystemF: newtype TC (n :: Nat) a
+ PureSystemF: pp :: forall (n :: Nat). Vec n LocalName -> Exp n -> String
+ PureSystemF: push :: forall (n :: Nat) a. LocalName -> Exp n -> TC ('S n) a -> TC n a
+ PureSystemF: runTC :: forall (n :: Nat) a. TcEnv n -> TC n a -> Either Error a
+ PureSystemF: t0 :: Exp 'Z
+ PureSystemF: t1 :: Exp 'Z
+ PureSystemF: t2 :: Exp 'Z
+ PureSystemF: type Error = String
+ PureSystemF: type Ty = Exp
+ ScopeCheck: [App] :: forall a. Exp a -> Exp a -> Exp a
+ ScopeCheck: [Lam] :: forall a. a -> Exp a -> Exp a
+ ScopeCheck: [Var] :: forall a. a -> Exp a
+ ScopeCheck: data Exp a
+ ScopeCheck: idExp :: Exp String
+ ScopeCheck: illScoped :: Exp String
+ ScopeCheck: scopeCheck :: Eq a => Exp a -> Maybe (Exp 'Z)
+ ScopeCheck: trueExp :: Exp String
+ SystemF: TyExp :: Exp m n -> TyExp (n :: Nat) (m :: Nat)
+ SystemF: [ConsTmVar] :: forall (m :: Nat) (n1 :: Nat). Ty m -> FCtx m n1 -> FCtx m ('S n1)
+ SystemF: [ConsTyVar] :: forall (m1 :: Nat) (n :: Nat). FCtx m1 n -> FCtx ('S m1) n
+ SystemF: [EApp] :: forall (m :: Nat) (n :: Nat). Exp m n -> Exp m n -> Exp m n
+ SystemF: [ELam] :: forall (m :: Nat) (n :: Nat). Ty m -> Bind (Exp m) (Exp m) n -> Exp m n
+ SystemF: [ETApp] :: forall (m :: Nat) (n :: Nat). Exp m n -> Ty m -> Exp m n
+ SystemF: [ETLam] :: forall (n :: Nat) (m :: Nat). Bind Ty (TyExp n) m -> Exp m n
+ SystemF: [EVar] :: forall (n :: Nat) (m :: Nat). Fin n -> Exp m n
+ SystemF: [Empty] :: FCtx 'Z 'Z
+ SystemF: [TAll] :: forall (n :: Nat). Bind Ty Ty n -> Ty n
+ SystemF: [TArr] :: forall (n :: Nat). Ty n -> Ty n -> Ty n
+ SystemF: [TVar] :: forall (n :: Nat). Fin n -> Ty n
+ SystemF: [unTyExp] :: TyExp (n :: Nat) (m :: Nat) -> Exp m n
+ SystemF: data Exp (m :: Nat) (n :: Nat)
+ SystemF: data FCtx (m :: Nat) (n :: Nat)
+ SystemF: data Ty (n :: Nat)
+ SystemF: instance GHC.Classes.Eq (SystemF.Ty n)
+ SystemF: instance Rebound.Env.Lazy.Subst (SystemF.Exp m) (SystemF.Exp m)
+ SystemF: instance Rebound.Env.Lazy.Subst SystemF.Ty (SystemF.TyExp n)
+ SystemF: instance Rebound.Env.Lazy.Subst SystemF.Ty SystemF.Ty
+ SystemF: instance Rebound.Env.Lazy.SubstVar (SystemF.Exp m)
+ SystemF: instance Rebound.Env.Lazy.SubstVar SystemF.Ty
+ SystemF: lookup :: forall (n :: Nat) (m :: Nat). Fin n -> FCtx m n -> Ty m
+ SystemF: newtype TyExp (n :: Nat) (m :: Nat)
+ SystemF: substTy :: forall (m1 :: Nat) (m2 :: Nat) (n :: Nat). Env Ty m1 m2 -> Exp m1 n -> Exp m2 n
+ SystemF: tc :: forall (m :: Nat) (n :: Nat). FCtx m n -> Exp m n -> Maybe (Ty m)
+ SystemF: upTyScope :: forall (m :: Nat) (n1 :: Nat) (n2 :: Nat). Env (Exp m) n1 n2 -> Env (Exp ('S m)) n1 n2

Files

README.md view
@@ -41,67 +41,67 @@  ### Calculi -1. [Untyped lambda calculus](examples/LC.hs)+1. [Untyped lambda calculus](https://github.com/sweirich/rebound/blob/main/rebound/examples/LC.hs)     Defines the syntax and substitution functions for the untyped lambda    calculus. Uses these definitions to implement several interpreters. -2. [Untyped lambda calculus with let rec and nested lets](examples/LCLet.hs)+2. [Untyped lambda calculus with let rec and nested lets](https://github.com/sweirich/rebound/blob/main/rebound/examples/LCLet.hs)     Example of advanced binding forms: recursive definitions and sequenced    definitions. -3. [Untyped lambda calculus with pattern matching](examples/Pat.hs)+3. [Untyped lambda calculus with pattern matching](https://github.com/sweirich/rebound/blob/main/rebound/examples/Pat.hs)     Extends the lambda calculus example with pattern matching. -4. [System F](examples/SystemF.hs)+4. [System F](https://github.com/sweirich/rebound/blob/main/rebound/examples/SystemF.hs)     Working with two separate scopes (type and term variables) is tricky. This    example shows one way to do it. -5. [Pure System F](examples/PureSystemF.hs)+5. [Pure System F](https://github.com/sweirich/rebound/blob/main/rebound/examples/PureSystemF.hs)     An alternative way of defining System F, using one single syntactic class.    Also demonstrates how to use the `ScopedReader` monad for typechecking and    pretty-printing. -6. [Simple implementation of dependent types](examples/PTS.hs)+6. [Simple implementation of dependent types](https://github.com/sweirich/rebound/blob/main/rebound/examples/PTS.hs)     An implementation of a simple type checker for a dependent-type system.    Language includes Pi and Sigma types. -7. [Dependent Pattern Matching](examples/DepMatch.hs)+7. [Dependent Pattern Matching](https://github.com/sweirich/rebound/blob/main/rebound/examples/DepMatch.hs)     A dependent type system with nested, dependent pattern matching. Patterns may    also include scoped terms. -8. [Linear Lambda Calculus](examples/LinLC.hs)+8. [Linear Lambda Calculus](https://github.com/sweirich/rebound/blob/main/rebound/examples/LinLC.hs)     A linear version of the (simply typed) lambda calculus. Demonstrates how to    thread a typing context using the `ScopedState` monad.  ### Working with well-scoped expressions -1. [Scope checking](examples/ScopeCheck.hs)+1. [Scope checking](https://github.com/sweirich/rebound/blob/main/rebound/examples/ScopeCheck.hs)     Demonstrates how to convert a "named" (or _nominal_) expression to a    well-scoped expression. -2. [QuickCheck](examples/LCQC.hs)+2. [QuickCheck](https://github.com/sweirich/rebound/blob/main/rebound/examples/LCQC.hs)     Demonstrates the use of well-scoped terms with    [QuickCheck](https://hackage.haskell.org/package/QuickCheck). -3. [HOAS](examples/HOAS.hs)+3. [HOAS](https://github.com/sweirich/rebound/blob/main/rebound/examples/HOAS.hs)     Demonstrates how to layer a HOAS representation on top of a de Bruijn    representation. Based on Conor McBride's ["Classy    Hack"](https://mazzo.li/epilogue/index.html%3Fp=773.html). -4. [PatGen](examples/PatGen.hs)+4. [PatGen](https://github.com/sweirich/rebound/blob/main/rebound/examples/PatGen.hs) -   A variant of the [Pat](examples/Pat.hs) example, which demonstrates how+   A variant of the [Pat](https://github.com/sweirich/rebound/blob/main/rebound/examples/Pat.hs) example, which demonstrates how    generic programming can be used to derive some definitions.  ## Related libraries@@ -130,6 +130,3 @@   rename the bound variable in abstraction if it is already in the current   scope. -- [binder](https://hackage.haskell.org/package/binder)--  Uses HOAS.
examples/DepMatch.hs view
@@ -223,22 +223,6 @@   freeVars (PAnnot p t) = freeVars p <> freeVars t  ------------------------------------------------- weakening (convenience functions)--------------------------------------------------- >>> :t weaken' s1 t00--- weaken' s1 t00 :: Exp ('S ('S N1))---- >>> weaken' s1 t00--- 0 0--weaken' :: SNat m -> Exp n -> Exp (m + n)-weaken' m = applyE @Exp (weakenE' m)--weakenBind' :: SNat m -> Bind1 Exp Exp n -> Bind1 Exp Exp (m + n)-weakenBind' m = applyE @Exp (weakenE' m)------------------------------------------------ -- strengthening ---------------------------------------------- @@ -324,6 +308,28 @@ -- >>> tmid -- λ_. (λ_. 0) +sigmaExample :: Exp (S Z)+sigmaExample = Sigma star (bind1 (Sigma (Var f1) (bind1 (Var f1))))++tyEx = Pi star (bind1 (Pi sigmaExample (bind1 (Var f1))))++-- >>> :t Pat.bind+-- Pat.bind :: (Sized pat, Subst v c) => pat -> c (Size pat + n) -> Bind v c pat n++tmEx :: Exp Z+tmEx = Match (Branch (Scoped.bind PVar+                (Match (Branch (Scoped.bind (PPair PVar (PPair PVar PVar))+                          (Var f1)) :< Nil))) :< Nil)++-- >>> tyEx+-- Pi *. (Sigma *. 1 * 1) -> 1++-- >>> tmEx +-- λ_. (λ(_, (_, _)). 1)++-- >>> (checkType zeroE tmEx tyEx :: Either Err ())+-- Right ()+ --------------------------------------------------------  -- * Show instances@@ -602,10 +608,10 @@   case axiomAssoc @p2 @p1 @n of     Refl -> do       (g', e1) <- checkPattern g p1 tyA-      let tyB' = weakenBind' (size p1) tyB+      let tyB' = shift (size p1) tyB       let tyB'' = whnf (instantiate1 tyB' e1)       (g'', e2) <- checkPattern g' p2 tyB''-      let e1' = weaken' (size p2) e1+      let e1' = shift (size p2) e1       return (g'', Pair e1' e2) checkPattern g p ty = do   (g', e, ty') <- inferPattern g p
examples/PTS.hs view
@@ -66,15 +66,6 @@ -- False instance FV Exp where --- >>> :t weaken' s1 t00--- weaken' s1 t00 :: Exp ('S ('S N1))---- >>> weaken' s1 t00--- 0 0--weaken' :: SNat m -> Exp n -> Exp (m + n)-weaken' m = applyE @Exp (weakenE' m)- -- >>> strengthenRec s1 s1 snat t00 -- Just (0 0) 
rebound.cabal view
@@ -1,12 +1,12 @@ cabal-version:  3.0 name:           rebound-version:        0.1.1.0+version:        0.1.2.0 description:    Please see the README on GitHub at <https://github.com/sweirich/rebound> homepage:       https://github.com/sweirich/rebound bug-reports:    https://github.com/sweirich/rebound/issues author:         Stephanie Weirich, Noe De Santo maintainer:     sweirich@seas.upenn.edu, ndesanto@seas.upenn.edu-copyright:      2025 Stephanie Weirich, Noe De Santo+copyright:      2026 Stephanie Weirich, Noe De Santo license:        MIT license-file:   LICENSE build-type:     Simple@@ -20,6 +20,7 @@   ghc-options:      -Wno-type-defaults      -Wincomplete-patterns+     -Wno-deprecations   default-language:     GHC2021   default-extensions:@@ -42,13 +43,13 @@   import:       common-stanza   build-depends:-      base >= 4.15 && < 5.0-    , QuickCheck >= 2.15.0.1 && < 2.16-    , containers >= 0.6.8 && < 0.7-    , deepseq >= 1.5.1 && < 1.6+      base >= 4.15 && < 5+    , containers >= 0.6.7 && < 0.8+    , deepseq >= 1.4.8 && < 1.6+    , fin >= 0.3 && < 0.4     , mtl >= 2.3.1 && < 2.4-    , fin >= 0.3.2 && < 0.4-    , vec >= 0.5.1 && < 0.6+    , QuickCheck >= 2.14.3 && < 2.16+    , vec >= 0.5 && < 0.6   exposed-modules:       Rebound     , Rebound.Classes@@ -61,6 +62,7 @@     , Rebound.Env.StrictA     , Rebound.Env.StrictB     , Rebound.Env.Functional+    , Rebound.Env.ShiftList     , Rebound.Generics     , Rebound.Lib     , Rebound.MonadNamed@@ -80,6 +82,32 @@     , Data.Scoped.Classes     , Data.Scoped.Maybe   hs-source-dirs: src++library rebound-examples+  import:+    common-stanza+  visibility: private+  build-depends:+    base >=4.15, base < 5+    , rebound+    , mtl+    , HUnit < 1.7+    , QuickCheck+    , containers+    , prettyprinter < 1.8+  exposed-modules:+      LC+    , LCQC+    , LCLet+    , PTS+    , Pat+    , DepMatch+    , ScopeCheck+    , HOAS+    , SystemF+    , PureSystemF+    , LinLC+  hs-source-dirs: examples  test-suite rebound-tests   import:
src/Data/Fin.hs view
@@ -23,6 +23,7 @@   invert,   shiftN,   shift1,+  split,   weakenFin,   weakenFinRight,   weaken1Fin,@@ -236,3 +237,4 @@   -- Case: x < k, leave it alone strengthenRecFin (snat_ -> SS_ k) m n (FS x) =     FS <$> strengthenRecFin k m n x+
src/Data/LocalName.hs view
@@ -3,17 +3,31 @@ -- Description : Strings with an "identity" equality module Data.LocalName where +import Test.QuickCheck+ -- | A simple wrapper for strings--- All local names are equal so that when they are used as patterns+-- All local names are *equal* so that when they are used as patterns -- they will be ignored. newtype LocalName = LocalName {name :: String}  instance Eq LocalName where   x1 == x2 = True +rawEq :: LocalName -> LocalName -> Bool+rawEq n1 n2 = name n1 == name n2+ instance Show LocalName where   show (LocalName x) = x --- | A default name.+-- | A default name internalName :: LocalName internalName = LocalName "_internal"++wildcardName :: LocalName+wildcardName = LocalName "_"++instance Arbitrary LocalName where+  arbitrary = do +    str <- elements [ "x", "y", "z", "w" ]+    num <- elements [1,2,3,4,5,0]+    return (LocalName (str ++ show num))
src/Data/Scoped/Classes.hs view
@@ -78,7 +78,7 @@     maximum x = F.maximum @k (coerce x)      minimum :: (Ord (a n)) => f a n -> a n-    minimum x = F.maximum @k (coerce x)+    minimum x = F.minimum @k (coerce x)      sum :: (Num (a n)) => f a n -> a n     sum x = F.sum @k (coerce x)
src/Data/Scoped/Maybe.hs view
@@ -2,7 +2,7 @@ -- Module: Data.Scoped.Maybe -- Description : Scoped maybe ----- This module defines a Maybe type indexed by a scope+-- This module defines a Maybe type indexed by a scope. -- This module should be imported qualified. Many of the operations -- in this module have the same name as prelude functions. {-# LANGUAGE DeriveAnyClass #-}
src/Rebound/Bind/Local.hs view
@@ -1,11 +1,15 @@ -- |--- Module       : Rebound.Bind.Single+-- Module       : Rebound.Bind.Local -- Description  : Bind a single variable, with a name ----- Single variable binder, but includes a name (represented by a 'LocalName') for pretty printing.+-- Binders that includes a name (represented by a 'LocalName') for pretty printing. -- This is a specialization of "Rebound.Bind.Pat". module Rebound.Bind.Local   ( module Rebound,+    module Data.Vec,+    module Data.LocalName,++    -- * Single binder --     type Bind,     bind,     getLocalName,@@ -17,14 +21,59 @@     applyUnder,     bindWith,     unbindWith,-    instantiateWith+    instantiateWith,++-- * single binder --+    Bind1 (..),+    bind1,+    unbind1,+    unbindl1,+    getBody1,+    instantiate1,+    bindWith1,+    unbindWith1,+    instantiateWith1,+    applyUnder1,++    -- * Double binder --+    Bind2 (..),+    bind2,+    unbind2,+    getBody2,+    getLocalName2,+    instantiate2,+    bindWith2,+    unbindWith2,+    instantiateWith2,+    applyUnder2,++    -- * N-ary binder ---+    BindN (..),+    bindN,+    unbindN,+    unbindlN,+    getBodyN,+    getLocalNameN,+    instantiateN,+    bindWithN,+    unbindWithN,+    instantiateWithN,+    applyUnderN,   ) where +import Data.Fin qualified as Fin+import Data.Vec qualified as Vec+import Data.Vec (Vec(..))+import Data.LocalName import Rebound import Rebound.Bind.Pat qualified as Pat-import Data.Fin qualified as Fin+import Rebound.Env qualified as Env +++-- * -- Single Binder+ -- | Type binding a single variable. -- This data structure includes a delayed -- substitution for the variables in the body of the binder.@@ -81,6 +130,191 @@ -- The delayed substitution is __not__ applied, but is passed to the function instead. instantiateWith :: (SubstVar v) => Bind v c n -> v n -> (forall m. Env v m n -> c m -> c n) -> c n instantiateWith b v = Pat.instantiateWith b (oneE v)+++-- | Type binding a single variable.+-- This data structure includes a delayed+-- substitution for the variables in the body of the binder.+type Bind1 v c n = Bind v c n++-- | Bind a variable, using the identity substitution.+bind1 :: (Subst v c) => LocalName -> c (S n) -> Bind1 v c n+bind1 = bind++-- | Bind a variable, while suspending the provided substitution.+bindWith1 :: forall v c m n. LocalName -> Env v m n -> c (S m) -> Bind1 v c n+bindWith1 = bindWith++-- | Bind the default \"internal\" variable, while suspending the provided substitution.+internalBind1 :: (Subst v c) => c (S n) -> Bind1 v c n+internalBind1 = internalBind++-- | Retrieve the name of the bound variable.+getLocalName1 :: Bind1 v c n -> LocalName+getLocalName1 = getLocalName++-- | Retrieve the body of the binding.+getBody1 :: (Subst v c) => Bind1 v c n -> c (S n)+getBody1 = getBody++-- | Run a function on the body (and bound name), after applying the delayed substitution.+unbind1 :: (Subst v c) => Bind1 v c n -> ((LocalName, c (S n)) -> d) -> d+unbind1 = unbind++-- | Retrieve the body, as well as the bound name.+unbindl1 :: (Subst v c) => Bind1 v c n -> (LocalName, c (S n))+unbindl1 = unbindl++-- | Instantiate the body (i.e. replace the bound variable) with the provided term.+instantiate1 :: (Subst v c) => Bind1 v c n -> v n -> c n+instantiate1 = instantiate ++-- | Apply a function under the binder.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+applyUnder1 ::+  (Subst v c) =>+  (forall m. Env v m (S n2) -> c m -> c (S n2)) ->+  Env v n1 n2 ->+  Bind1 v c n1 ->+  Bind1 v c n2+applyUnder1 = applyUnder++-- | Run a function on the body.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+unbindWith1 :: (SubstVar v) => Bind1 v c n -> (forall m. LocalName -> Env v m n -> c (S m) -> d) -> d+unbindWith1 = unbindWith++-- | Instantiate the body (i.e. replace the bound variable) with the provided term.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+instantiateWith1 :: (SubstVar v) => Bind1 v c n -> v n -> (forall m. Env v m n -> c m -> c n) -> c n+instantiateWith1 = instantiateWith++++-- * -- Double Binder++-- | Type binding a single variable.+-- This data structure includes a delayed+-- substitution for the variables in the body of the binder.+type Bind2 v c n = Pat.Bind v c (Vec N2 LocalName) n++-- | Bind a variable, using the identity substitution.+bind2 :: (Subst v c) => LocalName -> LocalName -> c (S (S n)) -> Bind2 v c n+bind2 x y = Pat.bind (x ::: (y ::: VNil))++-- | Bind a variable, while suspending the provided substitution.+bindWith2 :: forall v c m n. LocalName -> LocalName -> Env v m n -> c (S (S m)) -> Bind2 v c n+bindWith2 x y = Pat.bindWith (x ::: (y ::: VNil))++-- | Bind the default \"internal\" variable, while suspending the provided substitution.+internalBind2 :: (Subst v c) => c (S (S n)) -> Bind2 v c n+internalBind2 = Pat.bind (internalName ::: internalName ::: VNil)++-- | Retrieve the names of the bound variable.+getLocalName2 :: Bind2 v c n -> Vec N2 LocalName+getLocalName2 = Pat.getPat++-- | Retrieve the body of the binding.+getBody2 :: (Subst v c) => Bind2 v c n -> c (S (S n))+getBody2 = Pat.getBody++-- | Run a function on the body (and bound name), after applying the delayed substitution.+unbind2 :: (Subst v c) => Bind2 v c n -> ((Vec N2 LocalName, c (S (S n))) -> d) -> d+unbind2 b f = f (getLocalName2 b, getBody2 b)++-- | Retrieve the body, as well as the bound name.+unbindl2 :: (Subst v c) => Bind2 v c n -> (Vec N2 LocalName, c (S (S n)))+unbindl2 b = (getLocalName2 b, getBody2 b)++-- | Instantiate the body (i.e. replace the bound variable) with the provided term.+instantiate2 :: (Subst v c) => Bind2 v c n -> v n -> v n -> c n+instantiate2 b e1 e2 = Pat.instantiate b (e1 .: (e2 .: zeroE))++-- | Apply a function under the binder.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+applyUnder2 ::+  (Subst v c) =>+  (forall m. Env v m (S (S n2)) -> c m -> c (S (S n2))) ->+  Env v n1 n2 ->+  Bind2 v c n1 ->+  Bind2 v c n2+applyUnder2 = Pat.applyUnder++-- | Run a function on the body.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+unbindWith2 :: (SubstVar v) => Bind2 v c n -> +   (forall m. LocalName -> LocalName -> Env v m n -> c (S (S m)) -> d) -> d+unbindWith2 b f = Pat.unbindWith b (\ v e b2 -> f (v Vec.! FZ) (v Vec.! (FS FZ)) e b2)++-- | Instantiate the body (i.e. replace the bound variable) with the provided term.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+instantiateWith2 :: (SubstVar v) => +  Bind2 v c n -> v n -> v n -> (forall m. Env v m n -> c m -> c n) -> c n+instantiateWith2 b v1 v2 = Pat.instantiateWith b (v1 .: (v2 .: zeroE))+++type BindN v c m n = Pat.Bind v c (Vec m LocalName) n+++-- | Bind a number of variables, using the identity substitution.+bindN :: forall m v c n. (Subst v c, SNatI m) => Vec m LocalName -> c (m + n) -> BindN v c m n+bindN = Pat.bind ++-- | Bind a number of variables, while suspending the provided substitution.+bindWithN :: forall p v c m n. (SNatI p) => Vec p LocalName -> Env v m n -> c (p + m) -> BindN v c p n+bindWithN = Pat.bindWith ++-- | Run a function on the body, after applying the delayed substitution.+unbindN :: forall m v c n d. (Subst v c, SNatI n, SNatI m) => +   BindN v c m n -> ((SNatI (m + n)) => Vec m LocalName -> c (m + n) -> d) -> d+unbindN bnd f = Pat.unbind bnd f++-- | Retrieve the body of the binding.+-- For this kind of binding, it is equivalent to 'getBodyN'.+unbindlN :: forall m v c n. (Subst v c, SNatI m) => BindN v c m n -> c (m + n)+unbindlN = Pat.getBody++-- | Retrieve the body of the binding.+getBodyN :: forall m v c n. (Subst v c, SNatI m) => BindN v c m n -> c (m + n)+getBodyN = Pat.getBody++getLocalNameN :: BindN v c m n -> Vec m LocalName+getLocalNameN = Pat.getPat++-- | Instantiate the body (i.e. replace the bound variables) with the provided terms.+instantiateN :: (Subst v c, SNatI m) => BindN v c m n -> Vec m (v n) -> c n+instantiateN b v = Pat.instantiate b (fromVec v)++-- | Run a function on the body.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+unbindWithN ::+  (SubstVar v, SNatI m) =>+  BindN v c m n ->+  (forall m1. Env v m1 n -> c (m + m1) -> d) ->+  d+unbindWithN b f = Pat.unbindWith b (const f)++-- | Instantiate the body (i.e. replace the bound variable) with the provided terms.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+instantiateWithN ::+  forall m v c d n.+  (SubstVar v, SNatI n, SNatI m) =>+  BindN v c m n ->+  Vec m (v n) ->+  (forall m. Env v m n -> c m -> d n) ->+  d n+instantiateWithN b v f =+  unbindWithN b (f . appendE (snat @m) (fromVec v))++-- | Apply a function under the binder.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+applyUnderN ::+  (Subst v c2, SNatI k) =>+  (forall m. Env v m (k + n2) -> c1 m -> c2 (k + n2)) ->+  Env v n1 n2 ->+  BindN v c1 k n1 ->+  BindN v c2 k n2+applyUnderN = Pat.applyUnder   -- Example
src/Rebound/Bind/Pat.hs view
@@ -188,7 +188,7 @@   appearsFree n (Rebind p1 p2) = appearsFree (Fin.shiftN (size p1) n) p2    freeVars :: (Sized p1, FV p2) => Rebind p1 p2 n -> Set (Fin n)-  freeVars = undefined+  freeVars (Rebind p1 p2) = rescope (size p1) (freeVars p2)  instance (Sized p1, Strengthen p2) => Strengthen (Rebind p1 p2) where   strengthenRec (k :: SNat k) (m :: SNat m) (n :: SNat n) (Rebind (p1 :: p1) p2) =@@ -235,12 +235,3 @@     Refl <- patEq ps1 ps2     return Refl   patEq _ _ = Nothing---- instance---   (forall p n. WithData v (pat p) n) =>---   WithData v (PatList pat p) n---   where---   extendWithData PNil = id---   extendWithData (PCons (p1 :: pat p1') (ps :: PatList pat ps')) =---     case axiomAssoc @ps' @p1' @n of---       Refl -> extendWithData @v ps . extendWithData @v p1
src/Rebound/Bind/PatN.hs view
@@ -9,6 +9,19 @@      PatN(..), +    -- * single binder (no suffix) --+    Bind (..),+    bind,+    unbind,+    unbindl,+    getBody,+    instantiate,+    bindWith,+    unbindWith,+    instantiateWith,+    applyUnder,++     -- * single binder --     Bind1 (..),     bind1,@@ -52,8 +65,6 @@ import Data.Fin qualified as Fin import Data.Vec qualified as Vec -- ---------------------------------------------------------------- -- N-ary patterns ----------------------------------------------------------------@@ -204,6 +215,81 @@   Bind1 v c1 n1 ->   Bind1 v c2 n2 applyUnder1 = Pat.applyUnder+++----------------------------------------------------------------+-- Single binder (other names)+----------------------------------------------------------------++-- | Type binding 1 variable.+-- This data structure includes a delayed+-- substitution for the variables in the body of the binder.+type Bind v c n = Bind1 v c n ++-- | Bind 1 variable, using the identity substitution.+bind :: (Subst v c) => c (S n) -> Bind v c n+bind = bind1++-- | Bind 1 variable, while suspending the provided substitution.+bindWith :: forall v c m n. Env v m n -> c (S m) -> Bind v c n+bindWith = bindWith1++-- | Run a function on the body, after applying the delayed substitution.+unbind ::+  forall v c n d.+  (SNatI n, Subst v c) =>+  Bind v c n ->+  ((SNatI (S n)) => c (S n) -> d) ->+  d+unbind = unbind1++-- | Retrieve the body of the binding.+-- For this kind of binding, it is equivalent to 'getBody1'.+unbindl :: forall v c n. (Subst v c) => Bind v c n -> c (S n)+unbindl = unbindl1++-- | Retrieve the body of the binding.+getBody ::+  forall v c n.+  (Subst v c) =>+  Bind1 v c n ->+  c (S n)+getBody = getBody1++-- | Instantiate the body (i.e. replace the bound variable) with the provided term.+instantiate :: (Subst v c) => Bind v c n -> v n -> c n+instantiate = instantiate1++-- | Run a function on the body.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+unbindWith ::+  (SubstVar v) =>+  Bind v c n ->+  (forall m. Env v m n -> c (S m) -> d) ->+  d+unbindWith = unbindWith1++-- | Instantiate the body (i.e. replace the bound variable) with the provided terms.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+instantiateWith ::+  (SubstVar v) =>+  Bind v c n ->+  v n ->+  (forall m. Env v m n -> c m -> d n) ->+  d n+instantiateWith = instantiateWith1+++-- | Apply a function under the binder.+-- The delayed substitution is __not__ applied, but is passed to the function instead.+applyUnder ::+  (Subst v c2) =>+  (forall m. Env v m (S n2) -> c1 m -> c2 (S n2)) ->+  Env v n1 n2 ->+  Bind v c1 n1 ->+  Bind v c2 n2+applyUnder = applyUnder1+  ---------------------------------------------------------------- -- Double binder
src/Rebound/Bind/Single.hs view
@@ -22,49 +22,3 @@ import Rebound import Rebound.Bind.PatN import Rebound.Classes---- | Type binding a single variable.--- This data structure includes a delayed--- substitution for the variables in the body of the binder.-type Bind v c n = Bind1 v c n---- | Bind a variable, using the identity substitution.-bind :: (Subst v c) => c (S n) -> Bind v c n-bind = bind1---- | Bind a variable, while suspending the provided substitution.-bindWith :: forall v c m n. Env v m n -> c (S m) -> Bind v c n-bindWith = bindWith1---- | Run a function on the body, after applying the delayed substitution.-unbind :: forall v c n d. (SNatI n, Subst v c) => Bind v c n -> ((SNatI (S n)) => c (S n) -> d) -> d-unbind = unbind1---- | Retrieve the body of the binding.--- For this kind of binding, it is equivalent to 'getBody'.-unbindl :: (Subst v c) => Bind v c n -> c (S n)-unbindl = unbindl1---- | Retrieve the body of the binding.-getBody :: forall v c n. (Subst v c) => Bind v c n -> c (S n)-getBody = getBody1---- | Instantiate the body (i.e. replace the bound variable) with the provided term.-instantiate :: (Subst v c) => Bind v c n -> v n -> c n-instantiate = instantiate1---- | Run a function on the body.--- The delayed substitution is __not__ applied, but is passed to the function instead.-unbindWith :: (SubstVar v) => Bind v c n -> (forall m. Env v m n -> c (S m) -> d) -> d-unbindWith = unbindWith1---- | Instantiate the body (i.e. replace the bound variable) with the provided term.--- The delayed substitution is __not__ applied, but is passed to the function instead.-instantiateWith :: (SubstVar v) => Bind v c n -> v n -> (forall m. Env v m n -> c m -> d n) -> d n-instantiateWith = instantiateWith1---- | Apply a function under the binder.--- The delayed substitution is __not__ applied, but is passed to the function instead.-applyUnder :: (Subst v c2) => (forall m. Env v m (S n2) -> c1 m -> c2 (S n2)) -> Env v n1 n2 -> Bind v c1 n1 -> Bind v c2 n2-applyUnder = applyUnder1-
src/Rebound/Env.hs view
@@ -38,9 +38,9 @@     toVec,     tabulate,     fromTable,-    weakenE',     weakenER,     shiftFromApplyE,+    skip   ) where @@ -84,8 +84,10 @@ idE :: (SubstVar v) => Env v n n idE = shiftNE s0 --- | Append two environments.---++++-- | append two environments -- The `SNatI` constraint is a runtime witness for the length -- of the domain of the first environment. (.++) ::@@ -124,10 +126,14 @@ shift1E :: (SubstVar v) => Env v n (S n) shift1E = shiftNE s1 --- | Increment all free variables by @p@.+-- | rename then increment by 1+skip :: SubstVar v => Env v m n -> Env v m (S n)+skip e = e .>> shift1E++-- | Shift an environment by size `p` upN ::   forall v p m n.-  (Subst v v) =>+  (SubstVar v) =>   SNat p ->   Env v m n ->   Env v (p + m) (p + n)@@ -137,7 +143,7 @@     base = MkUpN id     step :: forall p1. UpN v m n p1 -> UpN v m n (S p1)     step (MkUpN r) = MkUpN $-      \e -> var Fin.f0 .: (r e .>> shiftNE s1)+      \e -> var Fin.f0 .: (skip (r e))  newtype UpN v m n p = MkUpN {getUpN :: Env v m n -> Env v (p + m) (p + n)} 
src/Rebound/Env/Lazy.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE UndecidableSuperClasses #-}-{-# OPTIONS_HADDOCK hide #-}+-- | The concrete implementation of environments module Rebound.Env.Lazy where  -- "Defunctionalized" representation of environment@@ -115,7 +115,7 @@ {-# INLINEABLE weakenE' #-}  -- | Shift the term, increasing every free variable as well as the bound by the provided amount.-shiftNE :: (SubstVar v) => (SubstVar v) => SNat m -> Env v n (m + n)+shiftNE :: (SubstVar v) => SNat m -> Env v n (m + n) shiftNE = Inc {-# INLINEABLE shiftNE #-} 
+ src/Rebound/Env/ShiftList.hs view
@@ -0,0 +1,170 @@+-- This implementation is adapted from+-- https://mathisbd.github.io/blog/esubstitutions.html+-- TODO: still missing weakenER, but should be able to test and run it now+{-# LANGUAGE DefaultSignatures #-}+{-# LANGUAGE UndecidableSuperClasses #-}+module Rebound.Env.ShiftList where++import Data.Nat+import Data.Fin++import Rebound.Lib +import GHC.Generics hiding (S)+import Control.DeepSeq (NFData (..))++------------------------------------------------------------------------------+-- Substitution class declarations+------------------------------------------------------------------------------+-- | Well-scoped types that can be the range of+-- an environment. This should generally be the @Var@+-- constructor from the syntax.+class (Subst v v) => SubstVar (v :: Nat -> Type) where+  var :: Fin n -> v n+++-- | Apply the environment throughout a term of+-- type `c n`, replacing variables with values+-- of type `v m`+class (SubstVar v) => Subst v c where+  applyE :: Env v n m -> c n -> c m+  default applyE :: (Generic1 c, GSubst v (Rep1 c), SubstVar v) => Env v m n -> c m -> c n+  applyE = gapplyE+  {-# INLINE applyE #-}+  isVar :: c n -> Maybe (v :~: c, Fin n)+  isVar _ = Nothing+  {-# INLINE isVar #-}++-- | Generic programming variant of 'applyE'.+gapplyE :: forall c v m n. (Generic1 c, GSubst v (Rep1 c), Subst v c) => Env v m n -> c m -> c n+gapplyE r e | Just (Refl, x) <- isVar @v @c e = applyEnv r x+gapplyE r e = applyOpt (\s x -> to1 $ gsubst s (from1 x)) r e+{-# INLINEABLE gapplyE #-}++-- | Generic programming support for 'Subst'.+class GSubst v (e :: Nat -> Type) where+  gsubst :: Env v m n -> e m -> e n+++------------------------------------------------------------------------------+-- Environment representation+------------------------------------------------------------------------------++-- The 'SNat k' in this representation is an embedded shift +-- that means that 'Inc k' is the same as 'Inc k'+data Env a m n where+    Zero :: Env a Z n+    Inc  :: !(SNat k) -> Env a n (k + n)+    Cons :: !(SNat k) -> a m -> (Env a n m) -> Env a (S n) (k + m)++instance (forall n. NFData (a n)) => NFData (Env a n m) where+  rnf :: (forall (n1 :: Nat). NFData (a n1)) => Env a n m -> ()+  rnf Zero = ()+  rnf (Inc x) = rnf x +  rnf (Cons x a xs) = rnf x `seq` rnf a `seq` rnf xs ++------------------------------------------------------------------------------+-- Application+------------------------------------------------------------------------------++weaken :: forall a k n. Subst a a => SNat k -> a n -> a (k + n)+weaken k t = applyE @a (shiftNE k) t++applyEnv ::  SubstVar a => Env a n m -> Fin n -> a m+applyEnv s i = applyRec @N0 snat s i+{-# INLINEABLE applyEnv #-}++-- | Build an optimized version of applyE.+-- Checks to see if we are applying the identity substitution first.+applyOpt :: (Env v n m -> c n -> c m) -> (Env v n m -> c n -> c m)+applyOpt f (Inc SZ) x = x+applyOpt f r x = f r x+{-# INLINEABLE applyOpt #-}++-- | As we traverse the list, accumulate the shifting amount and +-- apply it all at once.+applyRec :: forall acc a n m . SubstVar a => +    SNat acc -> Env a n m -> Fin n -> a (acc + m)+applyRec acc s i = +    case s of +        Zero -> case i of {}+        Inc (k :: SNat k) -- renaming+              | Refl <- axiomPlusZ @m+              , Refl <- axiomAssoc @acc @k @n+              -> var (shiftN (sPlus acc k) i)+        Cons (k :: SNat k) (t :: a m1) s +              | Refl <- axiomAssoc @acc @k @m1 +              -> case i of +                   FZ   -> weaken (sPlus acc k) t  -- substitution+                   FS j -> applyRec (sPlus acc k) s j+++zeroE :: Env a Z n+zeroE = Zero+{-# INLINEABLE zeroE #-}++-- TODO: add weakenER to this definition+weakenER :: forall m v n. (SubstVar v) => SNat m -> Env v n (n + m)+weakenER = undefined++shiftNE :: SNat k -> Env a n (k + n)+shiftNE k = Inc k+{-# INLINEABLE shiftNE #-}++(.:) :: a m -> Env a n m -> Env a (S n) m+(.:) = Cons SZ +{-# INLINEABLE (.:) #-}+++-- | inverse of @cons@ -- remove the first mapping+tail :: (SubstVar v) => Env v (S n) m -> Env v n m+tail x = shiftNE s1 .>> x+{-# INLINEABLE tail #-}++-- Compose a substitution with shifting, just add the shifting amount +-- to the head of the substitution+-- skip k s == s .>> Inc k +skip0 :: forall k0 a n m. SNatI k0 => Env a n m -> Env a n (k0 + m)+skip0 s = case s of+              Zero -> Zero+              (Inc (k :: SNat k)) +                | Refl <- axiomAssoc @k0 @k @n+                    -> Inc (sPlus (snat @k0) k)+              (Cons (k :: SNat k) (t :: a m1) s)+                | Refl <- axiomAssoc @k0 @k @m1+                    -> Cons (sPlus (snat @k0) k) t s+{-# INLINEABLE skip0 #-}++up :: forall a n m. SubstVar a => Env a n m -> Env a (S n) (S m)+up s = var f0 .: (skip0 @N1 s)++-- NB: there is a generic definition of upN in Env.hs, but I don't know +-- how efficient it is.++-- | Compose two environments, applying them in sequence (left then right).+(.>>) :: (SubstVar v) => Env v p n -> Env v n m -> Env v p m+(.>>) = comp+{-# INLINEABLE (.>>) #-}++-- | look at the two arguments and compose them together smartly+comp :: forall a m n p. (SubstVar a) =>+         Env a m n -> Env a n p -> Env a m p+comp Zero s = Zero    +-- if the second argument is a shift, we can use skip    +comp s (Inc (k :: SNat k)) = withSNat k $ skip0 @k s+-- if the first argument is a shift, we can drop substitutions in the second+-- argument+comp (Inc SZ) s = s+comp (Inc (snat_ -> SS_ m1)) (Cons (k :: SNat k) _ xs) = +    comp (Inc m1) (withSNat k $ skip0 @k xs)+-- for the Cons/Cons case, we need to apply the second substitution +-- to 'x' (after it has been shifted by k)+comp (Cons (k :: SNat k) (x :: a n1) xs) s = Cons SZ head tail where+    head = applyE @a (comp (Inc k) s) x+    tail = comp (withSNat k $ skip0 @k xs) s++-- | Map the range of an environment. Has to preserve the scope of the range.+transform :: (SubstVar b) => +   (forall m. a m -> b m) -> Env a n m -> Env b n m+transform f Zero = Zero+transform f (Inc k) = Inc k+transform f (Cons k x xs) = Cons k (f x) (transform f xs)
src/Rebound/Env/Strict.hs view
@@ -113,7 +113,7 @@ {-# INLINEABLE weakenE' #-}  -- | increment all free variables by m-shiftNE :: (SubstVar v) => (SubstVar v) => SNat m -> Env v n (m + n)+shiftNE :: (SubstVar v) => SNat m -> Env v n (m + n) shiftNE = Inc {-# INLINEABLE shiftNE #-} 
src/Rebound/Generics.hs view
@@ -29,6 +29,7 @@   {-# INLINE gsubst #-}  instance (GSubst b f, GSubst b g) => GSubst b (f :*: g) where+  gsubst :: (GSubst b f, GSubst b g) => Env b m n -> (:*:) f g m -> (:*:) f g n   gsubst s (f :*: g) = gsubst s f :*: gsubst s g   {-# INLINE gsubst #-} @@ -76,7 +77,7 @@   {-# INLINE gfreeVars #-}  instance (GFV f, GFV g) => GFV (f :*: g) where-  gappearsFree s (f :*: g) = gappearsFree s f && gappearsFree s g+  gappearsFree s (f :*: g) = gappearsFree s f || gappearsFree s g   {-# INLINE gappearsFree #-}   gfreeVars (f :*: g) = gfreeVars f <> gfreeVars g   {-# INLINE gfreeVars #-}
test/Examples/DepMatch.hs view
@@ -21,7 +21,6 @@         ((snat,) <$> patternMatch pat0 tm0) @?= Just (snat @N2, sig Star (Var f0) .: (Star .: zeroE)),       testCase "Is f0 free in t00?" $ appearsFree f0 t00 @?= True,       testCase "Is f1 free in t00?" $ appearsFree f1 t00 @?= False,-      testCase "Weaken t00 by 1" $ weaken' s1 t00 @?= (Var f0 `App` Var f0),       testCase "Strengthen t00 by 1/1" $ strengthenRec s1 s1 snat t00 @?= Just (Var f0 `App` Var f0),       testCase "Strengthen t01 by 1/1" $ strengthenRec s1 s1 snat t01 @?= Nothing,       testCase "Pretty-print t0" $ show t0 @?= "λ_. 0",
test/Examples/PTS.hs view
@@ -22,7 +22,6 @@     "PTS"     [ testCase "Is f0 free in t00?" $ appearsFree f0 t00 @?= True,       testCase "Is f1 free in t00?" $ appearsFree f1 t00 @?= False,-      testCase "Weaken t00 by 1" $ weaken' s1 t00 @?= App (Var f0) (Var f0),       testCase "Strengthen t00 by 1/1" $         strengthenRec s1 s1 snat t00 @?= Just (App (Var f0) (Var f0)),       testCase "Strengthen t01 by 1/1" $ strengthenRec s1 s1 snat t01 @?= Nothing,