packages feed

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

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}

module ADP.Multi.Parser where

import Data.Array

type Subword = [Int]
type Parser a b = Array Int a -> Subword -> [b]

data ParserInfo = ParserInfo1
                   {
                     minYield :: Int
                   , maxYield :: Maybe Int
                   }
                | ParserInfo2
                   {
                     minYield2 :: (Int,Int)
                   , maxYield2 :: (Maybe Int,Maybe Int)
                   }
                deriving (Eq, Show)
                   
type RichParser a b = (ParserInfo, Parser a b)

class Parseable p a b | p -> a b where
    toParser :: p -> RichParser a b
    
instance Parseable (RichParser a b) a b where
    toParser p = p