diff options
| author | Chris Wells <chris@mathematicaster.org> | 2025-02-04 06:53:26 -0600 |
|---|---|---|
| committer | Chris Wells <chris@mathematicaster.org> | 2025-02-04 06:53:26 -0600 |
| commit | ceb898747ad287e83fe18f81a955c186b7abac8e (patch) | |
| tree | 34777d7ba099c1093aea68812f855973e4bf8ca8 /src/Hakyll | |
| parent | f055d309a602790889cc23fd09d903ff077a357e (diff) | |
| download | main-ceb898747ad287e83fe18f81a955c186b7abac8e.tar main-ceb898747ad287e83fe18f81a955c186b7abac8e.tar.gz main-ceb898747ad287e83fe18f81a955c186b7abac8e.tar.bz2 main-ceb898747ad287e83fe18f81a955c186b7abac8e.tar.lz main-ceb898747ad287e83fe18f81a955c186b7abac8e.tar.xz main-ceb898747ad287e83fe18f81a955c186b7abac8e.tar.zst main-ceb898747ad287e83fe18f81a955c186b7abac8e.zip | |
Fixing templates + aliases
Diffstat (limited to 'src/Hakyll')
| -rw-r--r-- | src/Hakyll/Alias.hs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/Hakyll/Alias.hs b/src/Hakyll/Alias.hs new file mode 100644 index 0000000..b127a05 --- /dev/null +++ b/src/Hakyll/Alias.hs @@ -0,0 +1,42 @@ +module Hakyll.Alias where + +import Prolog +import Data.HashSet qualified as HS + + +newtype Aliased a x = Aliased { unAliased :: Either a x } + deriving newtype (Binary, Eq, Foldable, Functor, Generic, Generic1, Hashable, Ord, Show, Traversable) + +class (Eq a, Hashable a) => ToAliases x a where + toAliases :: x -> HashSet a + +instance Hashable a => ToAliases a a where + toAliases = HM.singleton + +instance (Eq a, Hashable a) => ToAliases (HashSet a) a where + toAliases = id + +instance ToAliases x a => ToAliases [x] a where + toAliases = foldMap toAliases + + +class FromAlias a x where + fromAlias :: MonadThrow m => a -> m x + +instance FromAlias a a where + fromAlias = pure + +instance (FromAlias a x, FromAlias b x) => FromAlias (Either a b) x where + fromAlias = either fromAlias fromAlias + +instance FromAlias a x => FromAlias (Aliased a x) x where + fromAlias = fromAlias . unAliased + +newtype NoAlias a =NoAlias a + deriving (Eq, Show) + +instance Show a => Exception (NoAlias a) where + displayException (NoAlias a) = show a <> " is not an alias" + +missingAlias :: MonadThrow m => a -> m b +missingAlias = throwM . NoAlias |
