{-# LANGUAGE OverloadedStrings #-} module Data.Attoparsec.Text.Base64 where import qualified Data.Attoparsec.Text as Atto import Data.Text (Text) import Data.Char (isAlphaNum) import Data.Monoid ((<>)) base64 :: Atto.Parser Text base64 = do init <- Atto.takeWhile1 (\c -> isAlphaNum c || c == '+' || c == '/') Atto.<?> "content" padding <- Atto.takeWhile (== '=') Atto.<?> "padding" pure (init <> padding)