packages feed

neuron-0.2.0.0: src/Neuron/Zettelkasten/Type.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Neuron.Zettelkasten.Type where

import Neuron.Zettelkasten.ID
import qualified Neuron.Zettelkasten.Meta as Z
import Relude hiding (show)
import Text.MMark (MMark)
import Text.Show (Show (show))

data Zettel
  = Zettel
      { zettelID :: ZettelID,
        zettelTitle :: Text,
        zettelContent :: MMark
      }

instance Eq Zettel where
  (==) = (==) `on` zettelID

instance Ord Zettel where
  compare = compare `on` zettelID

instance Show Zettel where
  show Zettel {..} = "Zettel:" <> show zettelID

hasTag :: Text -> Zettel -> Bool
hasTag t =
  isJust . (find (== t) <=< Z.tags <=< Z.getMeta) . zettelContent