18 lines
431 B
Haskell
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)
|