mbug-1.0: src/MBug/Data/FolderMH.hs
{-# LANGUAGE LambdaCase #-}
module MBug.Data.FolderMH
( FolderMH(..)
, readFolderMH
, showFolderMH
) where
import Data.Text (Text)
import qualified Data.Text as T
data FolderMH
= Absolute Text
| Relative Text
-- | Convert 'FolderMH' value into String. The output is formatted like
-- programs from mh(7) suite would expect, and does not look like
-- automatically generated 'Show' instance.
--
-- 'String' datatype is used, since it is part of "Options.Applicative"
-- module API.
showFolderMH :: FolderMH -> String
showFolderMH = \case
Absolute txt -> "+" ++ T.unpack txt
Relative txt -> "@" ++ T.unpack txt
-- | Parse 'FolderMH' value from String. That string must begin with
-- either @+@ character (absolute folder) or @\@@ (relative folder)
-- for parsing to succeed.
--
-- 'String' datatype is used, since it is part of "Options.Applicative"
-- module API.
readFolderMH :: String -> Maybe FolderMH
readFolderMH = \case
'+' : str -> Just $ Absolute (T.pack str)
'@' : str -> Just $ Relative (T.pack str)
_ -> Nothing