packages feed

proteome-0.9.9.9: lib/Proteome/Data/CurrentTag.hs

module Proteome.Data.CurrentTag where

import qualified Data.List.NonEmpty.Zipper as Zipper
import Data.List.NonEmpty.Zipper (Zipper)
import Path (Abs, File, Path)

import Proteome.Tags.State (TagLoc)

data CurrentTag =
  CurrentTag {
    name :: Text,
    locations :: Zipper (TagLoc (Path Abs File))
  }
  deriving stock (Eq, Show, Generic)

pattern CurrentLoc :: TagLoc (Path Abs File) -> CurrentTag
pattern CurrentLoc loc <- (Zipper.current . locations -> loc)
{-# complete CurrentLoc #-}

cycleLoc ::
  Zipper (TagLoc (Path Abs File)) ->
  Zipper (TagLoc (Path Abs File))
cycleLoc locs =
  fromMaybe (Zipper.start locs) (Zipper.right locs)