module Boomerang (
    module Text.Boomerang,
    module Text.Boomerang.TH,
    module Text.Boomerang.String,
    module Control.Category,
    module Text,
    TextBoomerang,
    parseText,
    unparseText,
    ()
    ) where

import Lawless hiding ((.), (), (<>))
import Text (Text, packed, unpacked, IsText)
import Text.Boomerang
import Text.Boomerang.TH
import Text.Boomerang.String
import Control.Category ((.), id, Category)

type TextError = StringError
type TextBoomerang a b = Boomerang TextError Text a b

()   (b  k) (c  k) (a  k) (cat  k  k  *).
    Category cat  cat b c  cat a b  cat a c
() = (.)
infixr 9 

parseText   r b. (IsText b)  StringBoomerang () (r :- ())  b  Either TextError r
parseText p t = parseString p (t ^. unpacked)

unparseText   r b. (IsText b)  StringBoomerang () (r :- ())  r  Maybe b
unparseText p r = view packed <$> unparseString p r