about summary refs log tree commit diff
path: root/users/aspen/xanthous/src/Xanthous/Util/Comonad.hs
blob: 9e158cc8e2d49aedea2a52c4fb1dacc4429f6ce9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--------------------------------------------------------------------------------
module Xanthous.Util.Comonad
  ( -- * Store comonad utils
    replace
  , current
  ) where
--------------------------------------------------------------------------------
import Xanthous.Prelude
--------------------------------------------------------------------------------
import Control.Comonad.Store.Class
--------------------------------------------------------------------------------

-- | Replace the current position of a store comonad with a new value by
-- comparing positions
replace :: (Eq i, ComonadStore i w) => w a -> a -> w a
replace w x = w =>> \w' -> if pos w' == pos w then x else extract w'
{-# INLINE replace #-}

-- | Lens into the current position of a store comonad.
--
--     current = lens extract replace
current :: (Eq i, ComonadStore i w) => Lens' (w a) a
current = lens extract replace
{-# INLINE current #-}