From 43f2cef4194cd348940aac8a34699057c2795aed Mon Sep 17 00:00:00 2001 From: "Niels G. W. Serup" Date: Sun, 6 Oct 2024 16:23:57 +0200 Subject: [PATCH] Generalize elemOfString into elemOf' --- byg/src/Function.hs | 12 +++++++----- byg/src/SiteGenerator.hs | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/byg/src/Function.hs b/byg/src/Function.hs index f55f5dd..640e580 100644 --- a/byg/src/Function.hs +++ b/byg/src/Function.hs @@ -7,7 +7,7 @@ module Function , fileComponents , lowerString , elemOf - , elemOfString + , elemOf' , makeTemplate , applyTemplate , toText @@ -79,10 +79,12 @@ lowerString :: TokenableTo String a => a -> DepGenM (Token String) lowerString a = runFunction LowerString =<< toToken a -class (Show w, Lift w) => WitnessFor w t | w -> t +class (Show w, Lift w) => WitnessFor w t | w -> t, t -> w where + witnessValue :: w data StringType = StringType deriving (Show, Lift) -instance WitnessFor StringType String +instance WitnessFor StringType String where + witnessValue = StringType data ElemOf a where ElemOf :: WitnessFor w a => w -> ElemOf a deriving instance Show (ElemOf a) @@ -93,8 +95,8 @@ instance (Show a, Lift a, Valuable a, Eq a) => IsFunction (ElemOf a) (a, [a]) Bo elemOf :: (Show t, Lift t, Valuable t, Eq t, TokenableTo t a, TokenableTo [t] b, WitnessFor w t) => w -> a -> b -> DepGenM (Token Bool) elemOf witness a b = runFunction (ElemOf witness) =<< toTupleToken a b -elemOfString :: (TokenableTo String a, TokenableTo [String] b) => a -> b -> DepGenM (Token Bool) -elemOfString = elemOf StringType +elemOf' :: (Show t, Lift t, Valuable t, Eq t, WitnessFor w t, TokenableTo t a, TokenableTo [t] b) => a -> b -> DepGenM (Token Bool) +elemOf' = elemOf witnessValue data MakeTemplate = MakeTemplate deriving (Show, Lift) diff --git a/byg/src/SiteGenerator.hs b/byg/src/SiteGenerator.hs index 6c6f2de..1d55520 100644 --- a/byg/src/SiteGenerator.hs +++ b/byg/src/SiteGenerator.hs @@ -17,7 +17,7 @@ copyTo path targetDir = do hasExtension :: (TokenableTo [String] a, TokenableTo FilePath b) => a -> b -> DepGenM (Token Bool) hasExtension exts filename = do ext <- lowerString =<< untupleSndDepGenM =<< fileComponents filename - ext `elemOfString` exts + ext `elemOf'` exts handleRecipeDir :: Token FilePath -> Token Template -> Token FilePath -> Token FilePath -> DepGenM () handleRecipeDir outputDir htmlTemplate indexName dir = do