module Musicology.Pitch.Internal
  ( parseInt
  , parseInt'
  , munchChar
  , munchChar1
  )
where

import qualified Text.ParserCombinators.ReadP  as R
import           Data.Char                      ( isDigit )

parseInt :: R.ReadP Int
parseInt :: ReadP Int
parseInt = do
  String
sign <- forall a. a -> ReadP a -> ReadP a
R.option String
"" forall a b. (a -> b) -> a -> b
$ String -> ReadP String
R.string String
"-"
  String
dgts <- (Char -> Bool) -> ReadP String
R.munch1 Char -> Bool
isDigit
  forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. Read a => String -> a
read forall a b. (a -> b) -> a -> b
$ String
sign forall a. Semigroup a => a -> a -> a
<> String
dgts

parseInt' :: R.ReadP Int
parseInt' :: ReadP Int
parseInt' = forall a. Read a => String -> a
read forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> ReadP String
R.munch Char -> Bool
isDigit

munchChar :: Char -> R.ReadP String
munchChar :: Char -> ReadP String
munchChar Char
c = (Char -> Bool) -> ReadP String
R.munch (forall a. Eq a => a -> a -> Bool
== Char
c)

munchChar1 :: Char -> R.ReadP String
munchChar1 :: Char -> ReadP String
munchChar1 Char
c = (Char -> Bool) -> ReadP String
R.munch1 (forall a. Eq a => a -> a -> Bool
== Char
c)