28 lines
640 B
Haskell
28 lines
640 B
Haskell
module AreaCode (AreaCode,separateAreaCode) where
|
|
|
|
import qualified Data.Attoparsec.Text as A
|
|
import Data.Attoparsec.Combinator
|
|
import qualified Data.Text as T
|
|
|
|
type Number = String
|
|
type Name = String
|
|
type AreaCode = String
|
|
|
|
{-Area Code Parser-}
|
|
|
|
separateAreaCode :: Number -> (AreaCode,Number)
|
|
separateAreaCode nr =
|
|
case A.parse parseAreaCode (T.pack nr) of
|
|
A.Done s ac -> (ac, T.unpack s)
|
|
_ -> ("",nr)
|
|
|
|
parseAreaCode :: A.Parser String
|
|
parseAreaCode = do
|
|
many' (A.char ' ')
|
|
A.char '('
|
|
ac <- many1 $ A.satisfy (A.inClass "0123456789")
|
|
A.char ')'
|
|
many' (A.char ' ')
|
|
return ac
|
|
|