module GLL.Combinators.Options where -- | Options datatype -- * left_biased_choice: see function leftBiased -- * pivot_select: provide a filtering function on `pivots' data PCOptions = PCOptions { left_biased_choice :: Bool , pivot_select :: Maybe ([Int] -> [Int]) } -- | The default options: no disambiguation defaultOptions :: PCOptions defaultOptions = PCOptions False Nothing -- | Perform a disambiguation similar to 'longest-match' maximumPivot :: PCOptions -> PCOptions maximumPivot opts = opts {pivot_select = Just op} where op [] = [] op xs = (:[]) $ maximum xs -- | Make the <|> combinator left-biased such that it -- only returns results of the right child if the left -- child does not has any results. leftBiased :: PCOptions leftBiased = defaultOptions { left_biased_choice = True }