ADPfusionSet-0.0.0.1: ADP/Fusion/Core/Boundary.hs
-- | Core structures for using 'Boundary' indices. These are isomorphic to
-- @Int@ but are to be used to indicate "boundary" elements in sets.
--
-- Immediate use is given, if one for example wants to extract posterior
-- scores for each possible endpoint in a set.
module ADP.Fusion.Core.Boundary where
import Data.Vector.Fusion.Stream.Monadic (singleton)
import Data.PrimitiveArray hiding (map)
import ADP.Fusion.Core.Classes
import ADP.Fusion.Core.Multi
instance RuleContext (Boundary i I) where
type Context (Boundary i I) = InsideContext ()
initialContext _ = IStatic ()
{-# Inline initialContext #-}
newtype instance RunningIndex (Boundary i I) = RiBI (Boundary i I)
instance
( Monad m
) => MkStream m S (Boundary i I) where
-- In case of @X -> ε@ or @X -> Singleton@, we have a static case here
-- and allow the rule to succeed.
-- TODO is this right? I don't think so
mkStream S _ u k
= singleton . ElmS . RiBI $ k
{-# Inline mkStream #-}
instance TableStaticVar u c (Boundary i I) where
tableStaticVar _ c _ _ = IVariable ()
tableStreamIndex _ c _ z = z
{-# Inline tableStaticVar #-}
{-# Inline tableStreamIndex #-}