module ADP.Multi.Helpers (
mk,
mkTwoTrack,
axiom,
axiomTwoTrack
) where
import Control.Exception
import Data.Array
import ADP.Multi.Parser
mk :: [a] -> Array Int a
mk xs = array (1,length xs) (zip [1..] xs)
mkTwoTrack :: [a] -> [a] -> Array Int a
mkTwoTrack xs ys = mk (xs ++ ys)
axiom :: Array Int a -> RichParser a b -> [b]
axiom z (_,ax) =
let (_,l) = bounds z
in ax z [0,l]
axiomTwoTrack :: Eq a => Array Int a -> [a] -> [a] -> RichParser a b -> [b]
axiomTwoTrack z inp1 inp2 (_,ax) =
assert (z == mkTwoTrack inp1 inp2) $
ax z [0,l1,l1,l1+l2]
where l1 = length inp1
l2 = length inp2