FeedMonad/FeedMonad/src/Data/Category.hs

18 lines
431 B
Haskell

{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveTraversable #-}
module Data.Category where
import Data.Text (Text)
data Category a
= Leaf a
| Category Text [Category a]
deriving (Show, Functor, Foldable, Traversable)
foldCategory :: (a -> b) -> (Text -> [b] -> b) -> Category a -> b
foldCategory fab f = go
where
go (Leaf a) = fab a
go (Category txt cats) = f txt (map go cats)