From fcee1c0c8c9c8ddce45f26c566b5eb8527e9dd0b Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sun, 28 May 2023 01:56:59 +0100 Subject: Add type annotations to query function --- src/Zettel/Types.hs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Zettel/Types.hs b/src/Zettel/Types.hs index 2b8d23d..580052b 100644 --- a/src/Zettel/Types.hs +++ b/src/Zettel/Types.hs @@ -1,9 +1,9 @@ {-# LANGUAGE DerivingVia #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE StandaloneDeriving #-} module Zettel.Types ( Combine (..), @@ -18,8 +18,8 @@ module Zettel.Types where import Text.Pandoc.Builder (ToMetaValue (..)) -import Text.Pandoc.Definition (Inline (..), Pandoc (..), Block (..), Row (..), Caption (..), TableHead(..), TableBody(..), TableFoot(..), Meta(..), MetaValue(..)) -import Text.Pandoc.Walk (Walkable(..)) +import Text.Pandoc.Definition (Block (..), Caption (..), Inline (..), Meta (..), MetaValue (..), Pandoc (..), Row (..), TableBody (..), TableFoot (..), TableHead (..)) +import Text.Pandoc.Walk (Walkable (..)) class Combine a where cappend :: a -> a -> a @@ -97,12 +97,17 @@ instance Combine Zettel where cempty = Zettel cempty cempty cempty cempty cempty -walkMZettel :: (Walkable a Pandoc, Monad m, Applicative m, Functor m) - => (a -> m a) -> Zettel -> m Zettel +walkMZettel :: + (Walkable a Pandoc, Monad m, Applicative m, Functor m) => + (a -> m a) -> + Zettel -> + m Zettel walkMZettel f b = do res <- walkM f (zettelBody b) return b {zettelBody = res} +queryZettel :: + (Walkable a Pandoc, Monoid c) => (a -> c) -> Zettel -> c queryZettel f = query f . zettelBody instance Walkable Block Zettel where @@ -139,13 +144,19 @@ data ZettelGraph = ZettelGraph } deriving (Show, Eq) -walkMZettelGraph :: (Walkable a Pandoc, Walkable a Zettel, Monad m, Applicative m, Functor m) - => (a -> m a) -> ZettelGraph -> m ZettelGraph +walkMZettelGraph :: + (Walkable a Pandoc, Walkable a Zettel, Monad m, Applicative m, Functor m) => + (a -> m a) -> + ZettelGraph -> + m ZettelGraph walkMZettelGraph f b = do res <- traverse (walkM f) (unZettelGraph b) newBib <- traverse (walkM f) (zettelGraphBib b) return $ ZettelGraph res newBib +queryZettelGraph + :: (Monoid a1, Walkable a2 Zettel, Walkable a2 Pandoc) => + (a2 -> a1) -> ZettelGraph -> a1 queryZettelGraph f g = query f (unZettelGraph g) <> maybe mempty (query f) (zettelGraphBib g) instance Walkable Block ZettelGraph where @@ -176,4 +187,4 @@ instance Walkable [Inline] ZettelGraph where walkM = walkMZettelGraph query = queryZettelGraph ---instance Walkable ZettelGraph +-- instance Walkable ZettelGraph -- cgit