packages feed

emhell-0.1: src/EmHell/Parsers.hs

module EmHell.Parsers
  ( hostPort
  ) where

import Data.Attoparsec.Text (Parser)
import Options.Applicative (ReadM)
import qualified Data.Attoparsec.Text
import qualified Data.Text
import qualified Options.Applicative

attoReadM :: Parser a -> ReadM a
attoReadM p =
  Options.Applicative.eitherReader
    $ Data.Attoparsec.Text.parseOnly p
    . Data.Text.pack

parseAddress :: Parser String
parseAddress =
  Data.Text.unpack
  <$> Data.Attoparsec.Text.takeWhile (/=':')

parsePort :: Parser Int
parsePort = do
  _ <- Data.Attoparsec.Text.char ':'
  d <- Data.Attoparsec.Text.decimal
  return d

hostPortP :: Parser (String, Int)
hostPortP = (,) <$> parseAddress <*> parsePort

hostPort :: ReadM (String, Int)
hostPort = attoReadM hostPortP