fix: typeclasses on yobjectexpr

This commit is contained in:
orion 2023-12-03 14:07:34 -06:00
parent 6c8effe96d
commit f3837c04c4
Signed by: orion
GPG Key ID: 6D4165AE4C928719

View File

@ -8,14 +8,20 @@ module Data.YAML.Foreign.Encode
, printYAML
) where
import Prelude
import Data.Array as Array
import Data.Bifunctor (rmap)
import Data.Foldable (class Foldable, foldMapDefaultL, foldl, foldr)
import Data.Function.Uncurried (Fn4, runFn4)
import Data.Map (Map)
import Data.Map as Map
import Data.Maybe (Maybe, maybe)
import Data.Monoid (class Monoid, class Semigroup)
import Data.Newtype (class Newtype, unwrap, wrap)
import Data.Traversable (class Traversable, sequenceDefault, traverse)
import Data.Tuple (Tuple(..), fst, snd)
import Data.Tuple.Nested (type (/\))
import Data.Tuple.Nested (type (/\), (/\))
import Prelude (class Eq, class Show, identity, map, show, ($), (<>), (==), (<<<))
import Unsafe.Coerce (unsafeCoerce)
@ -24,6 +30,30 @@ newtype YObjectExpr a = YObjectExpr (Array (String /\ a))
derive instance Newtype (YObjectExpr a) _
derive newtype instance (Show a) => Show (YObjectExpr a)
derive newtype instance (Eq a) => Eq (YObjectExpr a)
derive newtype instance Semigroup (YObjectExpr a)
derive newtype instance Monoid (YObjectExpr a)
instance Functor YObjectExpr where
map f = wrap <<< map (rmap f) <<< unwrap
instance Apply YObjectExpr where
apply fs' =
let
fs = map (\f a -> fst a /\ (snd f (snd a))) $ unwrap fs'
in
wrap <<< apply fs <<< unwrap
instance Foldable YObjectExpr where
foldl f b xs = foldl f b $ map snd $ unwrap xs
foldr f b xs = foldr f b $ map snd $ unwrap xs
foldMap = foldMapDefaultL
instance Traversable YObjectExpr where
traverse f t = map wrap $ traverse (\a -> map (fst a /\ _) $ f (snd a)) $ unwrap t
sequence = sequenceDefault
instance Bind YObjectExpr where
bind xs f = wrap $ Array.nubByEq (\a b -> fst a == fst b) $ bind (unwrap xs) (\a -> unwrap $ f (snd a))
type YArray = Array YValue