{-
Copyright (C) 2018 Dr. Alistair Ward
This file is part of BishBosh.
BishBosh is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
BishBosh is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with BishBosh. If not, see .
-}
{- |
[@AUTHOR@] Dr. Alistair Ward
[@DESCRIPTION@]
* .
-}
module BishBosh.Property.ExtendedPositionDescription(
-- * Types
-- ** Type-synonyms
EPD,
-- * Type-classes
ReadsEPD(..),
ShowsEPD(..),
-- * Constants
tag,
rankSeparator,
showsNullField,
showsSeparator,
-- * Functions
readEPD,
showEPD
) where
-- | An alternative to 'Read'.
class ReadsEPD a where
readsEPD :: ReadS a -- ^ Read a datum from EPD.
-- | An alternative to 'Show'.
class ShowsEPD a where
showsEPD :: a -> ShowS -- ^ Stringify a EPD-datum.
-- | Self-documentation.
type EPD = String
-- | Input-format.
tag :: String
tag = "epd"
-- | The delimiter between each row of data.
rankSeparator :: Char
rankSeparator = '/'
-- | Read from EPD.
readEPD :: ReadsEPD a => EPD -> a
readEPD epd = case readsEPD epd of
[(a, _)] -> a
_ -> error . showString "BishBosh.Property.ExtendedPositionDescription.readEPD:\tfailed to parse " $ shows epd "."
-- | Display in EPD.
showEPD :: ShowsEPD a => a -> EPD
showEPD a = showsEPD a ""
-- | The standard way to denote the absence of a field.
showsNullField :: ShowS
showsNullField = showChar '-'
-- | The standard separator between fields in EPD.
showsSeparator :: ShowS
showsSeparator = showChar ' '