3 | module Libraries.Data.Tap
9 | data Tap : (Type -> Type) -> Type -> Type where
11 | (::) : a -> m (Tap m a) -> Tap m a
14 | Functor m => Functor (Tap m) where
17 | x :: mxs => f x :: map (map f) mxs
20 | traverse : Monad m => (a -> m b) -> Tap m a -> m (Tap m b)
21 | traverse f [] = pure []
22 | traverse f (x :: mxs) = pure (!(f x) :: (mxs >>= traverse f))
25 | filter : Monad m => (a -> Bool) -> Tap m a -> m (Tap m a)
26 | filter p [] = pure []
28 | = do let mxs = mxs >>= filter p
30 | then pure $
x :: mxs