{-# LANGUAGE OverloadedStrings #-} import Control.Applicative import qualified Data.Attoparsec.Text as P import qualified Data.Text as T data Address = Address {start :: Int, end :: Int} deriving Show address = Address <$> hexDigits <*> (dash *> hexDigits) where hexDigits = P.string "0x" *> P.hexadecimal dash = P.char '-' parse parser str = P.feed (P.parse parser $ T.pack str) T.empty
~> ghci parse.hs *Main> parse address "0x1-0x1" Done "" Address {start = 1, end = 1}
cabal install attoparsec