sprinkles-0.3.5.0: src/Data/Walk.hs
{-#LANGUAGE MultiParamTypeClasses #-}
{-#LANGUAGE FlexibleInstances #-}
module Data.Walk
( Walk (..)
)
where
import qualified Data.Aeson as JSON
import Data.Text (Text)
import qualified Data.Text as Text
import Data.Vector (Vector)
import qualified Data.Vector as Vector
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
class Walk c e where
walk :: (e -> e) -> (c -> c)
instance Walk JSON.Value Text where
walk = jsonTextWalk
jsonTextWalk :: (Text -> Text) -> (JSON.Value -> JSON.Value)
jsonTextWalk f (JSON.String t) = JSON.String (f t)
jsonTextWalk f (JSON.Array v) = JSON.Array (fmap (walk f) v)
jsonTextWalk f (JSON.Object m) =
JSON.Object . HashMap.fromList $
[ (f k, walk f v) | (k, v) <- HashMap.toList m ]
jsonTextWalk _ x = x
instance Walk [a] a where
walk = map
instance Walk (Maybe a) a where
walk = fmap