module Data.ZettelPath where

import Data.Path

import Control.Lens
       (Iso', Lens', iso, lens, set, view)

newtype ZettelRoot = ZettelRoot (Path Root Dir)

_ZettelRoot :: Iso' (Path Root Dir) ZettelRoot
_ZettelRoot = iso ZettelRoot (\(ZettelRoot r) -> r)

class HasZettelRoot a where
  {-# MINIMAL getZettelRoot, setZettelRoot | zettelRoot #-}
  getZettelRoot :: a -> ZettelRoot
  getZettelRoot = view zettelRoot

  setZettelRoot :: a -> ZettelRoot -> a
  setZettelRoot = flip (set zettelRoot)

  zettelRoot :: Lens' a ZettelRoot
  zettelRoot = lens getZettelRoot setZettelRoot

instance HasZettelRoot ZettelRoot where
  zettelRoot = lens id (\_ b -> b)