packages feed

adp-multi-0.1.0: src/ADP/Multi/Helpers.hs

module ADP.Multi.Helpers where

import Control.Exception
import Data.Array
import ADP.Multi.Parser

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

        
-- # Create array from List

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)