diff options
| author | Chris Wells <chris@mathematicaster.org> | 2025-02-25 12:11:31 -0600 |
|---|---|---|
| committer | Chris Wells <chris@mathematicaster.org> | 2025-02-25 12:11:31 -0600 |
| commit | ed300e0b45bb46adec77b85474544f8908445a14 (patch) | |
| tree | 70ba794888475baafd2f433a075aa18193fdf03e /src/Data/Abbr.hs | |
| parent | e914e77f87a51c25141ab297d11344118a6f6e20 (diff) | |
| download | main-ed300e0b45bb46adec77b85474544f8908445a14.tar main-ed300e0b45bb46adec77b85474544f8908445a14.tar.gz main-ed300e0b45bb46adec77b85474544f8908445a14.tar.bz2 main-ed300e0b45bb46adec77b85474544f8908445a14.tar.lz main-ed300e0b45bb46adec77b85474544f8908445a14.tar.xz main-ed300e0b45bb46adec77b85474544f8908445a14.tar.zst main-ed300e0b45bb46adec77b85474544f8908445a14.zip | |
Writing utils for parsing and formatting my papers
Diffstat (limited to 'src/Data/Abbr.hs')
| -rw-r--r-- | src/Data/Abbr.hs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Data/Abbr.hs b/src/Data/Abbr.hs new file mode 100644 index 0000000..f42134f --- /dev/null +++ b/src/Data/Abbr.hs @@ -0,0 +1,40 @@ +module Data.Abbr + ( Abbr (..) + , Abbr_ + , abbrHtml + ) where + +import Prolog +import Network.URI +import Data.Aeson +import Data.Alias +import Data.Set qualified as S +import Text.Blaze +import Text.Blaze.Html + +import Data.Linked + +data Abbr a = Abbr + { name :: !a + , shortName :: !(Maybe a) + , link :: !(Maybe URI) + } deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable) + +instance Binary a => Binary (Abbr a) + +type Abbr_ = Abbr StrictText + +abbrHtml :: ToMarkup a => Abbr a -> Html +abbrHtml (Abbr n sn l) = linkedHtml $ Linked (fromMaybe n sn) l (n <$ sn) + +instance Ord a => ToAliases (Abbr a) where + toAliases (Abbr t st _) = S.fromList $ t : toList st + +instance FromAlias a (Abbr a) where + fromAlias t = pure $ Abbr t Nothing Nothing + +instance FromJSON a => FromJSON (Abbr a) where + parseJSON = withObject "Abbr" $ \v -> Abbr + <$> v .: "name" + <*> v .:? "short" .!= Nothing + <*> v .:? "link" .!= Nothing |
