summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Wells <chris@mathematicaster.org>2025-02-04 06:53:26 -0600
committerChris Wells <chris@mathematicaster.org>2025-02-04 06:53:26 -0600
commitceb898747ad287e83fe18f81a955c186b7abac8e (patch)
tree34777d7ba099c1093aea68812f855973e4bf8ca8 /src
parentf055d309a602790889cc23fd09d903ff077a357e (diff)
downloadmain-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')
-rw-r--r--src/Hakyll/Alias.hs42
-rw-r--r--src/Prolog.hs3
2 files changed, 45 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
diff --git a/src/Prolog.hs b/src/Prolog.hs
index a6ac1b5..bb464f5 100644
--- a/src/Prolog.hs
+++ b/src/Prolog.hs
@@ -216,3 +216,6 @@ instance ToMarkup URI where
instance ToValue URI where
toValue = toValue . show
preEscapedToValue = preEscapedToValue . show
+
+instance MonadThrow Compiler where
+ throwM = throwError . pure . displayException