packages feed

fei-base-1.0.0: c-apis/MXNet/Base/ParserUtils.hs

module MXNet.Base.ParserUtils (
    parseR,
    list,
    tuple,
    module Data.Attoparsec.Text
) where

import           Control.Lens         (ix, (^?!), _Right)
import           Data.Attoparsec.Text
import qualified Data.Attoparsec.Text as P
import           RIO

parseR :: HasCallStack => P.Parser a -> Text -> a
parseR c t = (parseOnly (c <* endOfInput) t) ^?! _Right

list  f = char '[' *> commaSep f <* char ']'
tuple f = char '(' *> liftA2 (,) f (char ',' *> f) <* char ')'

-- TODO give type level int, build a tuple of that size
many f = char '(' *> commaSep f <* char ')'

commaSep p  = p `sepBy` (char ',')