Safe Haskell | None |
---|---|
Language | Haskell2010 |
NOTE highly experimental
Synopsis
- pattern ElmSplitITbl :: !(Proxy uId) -> !(CalcSplitType splitType x) -> !(RunningIndex i) -> !(Elm ls i) -> !i -> Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i
- pattern ElmSplitBtITbl :: !(Proxy uId) -> !(CalcSplitType splitType (x, [r])) -> !(RunningIndex i) -> !(Elm ls i) -> !i -> Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i
- class SplitIxCol (uId :: Symbol) (b :: Bool) e where
- type SplitIxTy uId b e :: *
- splitIxCol :: Proxy uId -> Proxy b -> e -> SplitIxTy uId b e
- class Zconcat x y where
- type family OR a b where ...
- type family SameSid uId elm :: Bool where ...
- newtype Split (uId :: Symbol) (splitType :: SplitType) synVar = Split {
- getSplit :: synVar
- type family ArgTy argTy where ...
- type family CalcSplitType splitType varTy where ...
- data SplitType
- split :: Proxy (uId :: Symbol) -> Proxy (splitType :: SplitType) -> synVar -> Split uId splitType synVar
- collectIx :: forall uId ls i. SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i) => Proxy uId -> Elm ls i -> SplitIxTy uId (SameSid uId (Elm ls i)) (Elm ls i)
- data Proxy (t :: k) :: forall k. k -> Type = Proxy
Documentation
pattern ElmSplitITbl :: !(Proxy uId) -> !(CalcSplitType splitType x) -> !(RunningIndex i) -> !(Elm ls i) -> !i -> Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i Source #
pattern ElmSplitBtITbl :: !(Proxy uId) -> !(CalcSplitType splitType (x, [r])) -> !(RunningIndex i) -> !(Elm ls i) -> !i -> Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i Source #
class SplitIxCol (uId :: Symbol) (b :: Bool) e where Source #
Actually collect split indices based on if we managed to find the
right Split
synvar (based on the right symbol).
TODO this is not completely right, or? Since we should consider inside/outside?
TODO splitIxCol
will need the index type i
to combine running index
and index into the actual lookup part.
Instances
(SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i), Zconcat (SplitIxTy uId (SameSid uId (Elm ls i)) (Elm ls i)) (SplitIxTy uId (SameSid uId (TermSymbol a b)) (TermSymbol a b))) => SplitIxCol uId True (Elm (ls :!: TermSymbol a b) i) Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type splitIxCol :: Proxy uId -> Proxy True -> Elm (ls :!: TermSymbol a b) i -> SplitIxTy uId True (Elm (ls :!: TermSymbol a b) i) Source # | |
SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i) => SplitIxCol uId True (Elm (ls :!: Split sId splitType (TwITblBt b s arr c j x mF mB r)) i) Source # | |
SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i) => SplitIxCol uId True (Elm (ls :!: Split sId splitType (TwITbl b s m arr c j x)) i) Source # | |
(SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i), Element (ls :!: l) i, RecElm (ls :!: l) i ~ Elm ls i) => SplitIxCol uId False (Elm (ls :!: l) i) Source # | |
SplitIxCol uId b (Elm S i) Source # | |
class Zconcat x y where Source #
x ++ y
but for inductive tuples.
TODO move to PrimitiveArray
type family SameSid uId elm :: Bool where ... Source #
Closed type family that gives us a (type) function for type symbol equality.
newtype Split (uId :: Symbol) (splitType :: SplitType) synVar Source #
Wraps a normal non-terminal and attaches a type-level unique identier
and z-ordering (with the unused Z
at 0
).
TODO attach empty/non-empty stuff (or get from non-splitted synvar?)
TODO re-introduce z-ordering later (once we have a sort fun)
Instances
SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i) => SplitIxCol uId True (Elm (ls :!: Split sId splitType (TwITblBt b s arr c j x mF mB r)) i) Source # | |
SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i) => SplitIxCol uId True (Elm (ls :!: Split sId splitType (TwITbl b s m arr c j x)) i) Source # | |
Element ls i => Element (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type data Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i :: Type Source # type RecElm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i :: Type Source # type Arg (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) :: Type Source # getArg :: Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i -> Arg (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) Source # getIdx :: Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i -> RunningIndex i Source # getElm :: Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i -> RecElm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i Source # | |
Element ls i => Element (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type data Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i :: Type Source # type RecElm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i :: Type Source # type Arg (ls :!: Split uId splitType (TwITbl b s m arr c j x)) :: Type Source # getArg :: Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i -> Arg (ls :!: Split uId splitType (TwITbl b s m arr c j x)) Source # getIdx :: Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i -> RunningIndex i Source # getElm :: Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i -> RecElm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i Source # | |
Build (Split uId splitType synVar) Source # | |
type SplitIxTy uId True (Elm (ls :!: Split sId splitType (TwITblBt b s arr c j x mF mB r)) i) Source # | |
type SplitIxTy uId True (Elm (ls :!: Split sId splitType (TwITbl b s m arr c j x)) i) Source # | |
data Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type data Elm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i = ElmSplitBtITbl !(Proxy uId) !(CalcSplitType splitType (x, [r])) !(RunningIndex i) !(Elm ls i) !i | |
data Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type data Elm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i = ElmSplitITbl !(Proxy uId) !(CalcSplitType splitType x) !(RunningIndex i) !(Elm ls i) !i | |
type Arg (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type | |
type Arg (ls :!: Split uId splitType (TwITbl b s m arr c j x)) Source # | |
Defined in ADP.Fusion.Core.SynVar.Split.Type | |
type RecElm (ls :!: Split uId splitType (TwITblBt b s arr c j x mF mB r)) i Source # | |
type RecElm (ls :!: Split uId splitType (TwITbl b s m arr c j x)) i Source # | |
type Stack (Split uId splitType synVar) Source # | |
type family CalcSplitType splitType varTy where ... Source #
The Arg synVar
means that we probably need to rewrite the internal
type resolution now!
CalcSplitType Fragment varTy = () | |
CalcSplitType Final varTy = varTy |
split :: Proxy (uId :: Symbol) -> Proxy (splitType :: SplitType) -> synVar -> Split uId splitType synVar Source #
TODO Here, we probably want to default to a NonEmpty
condition. Or at
least have different versions of split
.
collectIx :: forall uId ls i. SplitIxCol uId (SameSid uId (Elm ls i)) (Elm ls i) => Proxy uId -> Elm ls i -> SplitIxTy uId (SameSid uId (Elm ls i)) (Elm ls i) Source #
collectIx
gobbles up indices that are tagged with the same symbolic
identifier.
data Proxy (t :: k) :: forall k. k -> Type #
Proxy
is a type that holds no data, but has a phantom parameter of
arbitrary type (or even kind). Its use is to provide type information, even
though there is no value available of that type (or it may be too costly to
create one).
Historically,
is a safer alternative to the
Proxy
:: Proxy
a'undefined :: a'
idiom.
>>>
Proxy :: Proxy (Void, Int -> Int)
Proxy
Proxy can even hold types of higher kinds,
>>>
Proxy :: Proxy Either
Proxy
>>>
Proxy :: Proxy Functor
Proxy
>>>
Proxy :: Proxy complicatedStructure
Proxy
Instances
Generic1 (Proxy :: k -> Type) | |
Monad (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Functor (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Applicative (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Foldable (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Defined in Data.Foldable fold :: Monoid m => Proxy m -> m # foldMap :: Monoid m => (a -> m) -> Proxy a -> m # foldr :: (a -> b -> b) -> b -> Proxy a -> b # foldr' :: (a -> b -> b) -> b -> Proxy a -> b # foldl :: (b -> a -> b) -> b -> Proxy a -> b # foldl' :: (b -> a -> b) -> b -> Proxy a -> b # foldr1 :: (a -> a -> a) -> Proxy a -> a # foldl1 :: (a -> a -> a) -> Proxy a -> a # elem :: Eq a => a -> Proxy a -> Bool # maximum :: Ord a => Proxy a -> a # minimum :: Ord a => Proxy a -> a # | |
Traversable (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Representable (Proxy :: Type -> Type) | |
Alternative (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
MonadPlus (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Eq1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Ord1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Defined in Data.Functor.Classes | |
Read1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Defined in Data.Functor.Classes | |
Show1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
NFData1 (Proxy :: Type -> Type) | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq | |
Hashable1 (Proxy :: Type -> Type) | |
Defined in Data.Hashable.Class | |
Bounded (Proxy t) | Since: base-4.7.0.0 |
Enum (Proxy s) | Since: base-4.7.0.0 |
Eq (Proxy s) | Since: base-4.7.0.0 |
Data t => Data (Proxy t) | Since: base-4.7.0.0 |
Defined in Data.Data gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Proxy t -> c (Proxy t) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Proxy t) # toConstr :: Proxy t -> Constr # dataTypeOf :: Proxy t -> DataType # dataCast1 :: Typeable t0 => (forall d. Data d => c (t0 d)) -> Maybe (c (Proxy t)) # dataCast2 :: Typeable t0 => (forall d e. (Data d, Data e) => c (t0 d e)) -> Maybe (c (Proxy t)) # gmapT :: (forall b. Data b => b -> b) -> Proxy t -> Proxy t # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Proxy t -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Proxy t -> r # gmapQ :: (forall d. Data d => d -> u) -> Proxy t -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Proxy t -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy t -> m (Proxy t) # | |
Ord (Proxy s) | Since: base-4.7.0.0 |
Read (Proxy t) | Since: base-4.7.0.0 |
Show (Proxy s) | Since: base-4.7.0.0 |
Ix (Proxy s) | Since: base-4.7.0.0 |
Generic (Proxy t) | |
Semigroup (Proxy s) | Since: base-4.9.0.0 |
Monoid (Proxy s) | Since: base-4.7.0.0 |
NFData (Proxy a) | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq | |
Hashable (Proxy a) | |
Defined in Data.Hashable.Class | |
type Rep1 (Proxy :: k -> Type) | Since: base-4.6.0.0 |
type Rep (Proxy :: Type -> Type) | |
type Rep (Proxy t) | Since: base-4.6.0.0 |