discrete-space-map 0.0.2 → 0.0.3
raw patch · 3 files changed
+15/−5 lines, 3 files
Files
Data/DiscreteSpaceMap.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances #-}+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, ViewPatterns, FlexibleInstances #-} module Data.DiscreteSpaceMap (Pos(..), Map(..), modify) where import Control.Comonad@@ -65,10 +65,14 @@ lookup = lookupDefault instance Pos p => Adjustable (Map p) where adjust f p z = seek (pos z) . modify f . seek p $ z++-- | @ `distribute` :: Functor f => f (Map p a) -> Map p (f a)@ instance Pos p => Distributive (Map p) where- distribute = distributeRep--- | @ `index` :: Pos p => Map p a -> p -> a@--- | @ `tabulate` :: Pos p => (p -> a) -> Map p a@+ distribute (fmap (seek zero) -> m) = Map zero (fmap extract m) (cotraverseD id $ (\(Map _ _ c) -> c) <$> m)++-- | @+-- `index` :: Pos p => Map p a -> p -> a+-- `tabulate` :: Pos p => (p -> a) -> Map p a@ instance Pos p => Representable (Map p) where type Rep (Map p) = p tabulate f = Map zero (f zero) (tabulateD f)
Data/DiscreteSpaceMap/Internal.hs view
@@ -69,6 +69,12 @@ tabulateD :: Pos p => (p -> a) -> MapD a tabulateD f = MapD (f (cons (zero, True))) $ tabulateD (\p -> (f (cons (p, False)), f (cons (p, True)))) +cotraverseD :: Functor f => (f a -> b) -> f (MapD a) -> MapD b+cotraverseD f m = MapD (f $ hd <$> m) (cotraverseD (\fa2 -> (f $ fst <$> fa2, f $ snd <$> fa2)) (tl <$> m))+ where+ hd (MapD a _) = a+ tl (MapD _ as) = as+ zipWithKeyD :: Pos p => (p -> a -> b -> c) -> p -> MapD a -> MapD b -> MapD c zipWithKeyD f p (MapD a ca) (MapD b cb) = MapD (f pOther a b) (zipWithKeyD f' pUp ca cb)
discrete-space-map.cabal view
@@ -1,5 +1,5 @@ name: discrete-space-map-version: 0.0.2+version: 0.0.3 synopsis: A discrete space map. description: A discrete space map implemented as a zipper on an infinite perfect binary tree. homepage: https://github.com/sjoerdvisscher/discrete-space-map