Module

Record

Package
purescript-record
Repository
purescript/purescript-record

#get Source

get :: forall a l r' r. IsSymbol l => Cons l a r' r => SProxy l -> Record r -> a

Get a property for a label which is specified using a value-level proxy for a type-level string.

For example:

get (SProxy :: SProxy "x") :: forall r a. { x :: a | r } -> a

#set Source

set :: forall b a l r r2 r1. IsSymbol l => Cons l a r r1 => Cons l b r r2 => SProxy l -> b -> Record r1 -> Record r2

Set a property for a label which is specified using a value-level proxy for a type-level string.

For example:

set (SProxy :: SProxy "x")
  :: forall r a b. a -> { x :: b | r } -> { x :: a | r }

#modify Source

modify :: forall b a l r r2 r1. IsSymbol l => Cons l a r r1 => Cons l b r r2 => SProxy l -> (a -> b) -> Record r1 -> Record r2

Modify a property for a label which is specified using a value-level proxy for a type-level string.

For example:

modify (SProxy :: SProxy "x")
  :: forall r a b. (a -> b) -> { x :: a | r } -> { x :: b | r }

#insert Source

insert :: forall a l r2 r1. IsSymbol l => Lacks l r1 => Cons l a r1 r2 => SProxy l -> a -> Record r1 -> Record r2

Insert a new property for a label which is specified using a value-level proxy for a type-level string.

For example:

insert (SProxy :: SProxy "x")
  :: forall r a. Lacks "x" r => a -> { | r } -> { x :: a | r }

#delete Source

delete :: forall a l r2 r1. IsSymbol l => Lacks l r1 => Cons l a r1 r2 => SProxy l -> Record r2 -> Record r1

Delete a property for a label which is specified using a value-level proxy for a type-level string.

Note that the type of the resulting row must lack the specified property. Since duplicate labels are allowed, this is checked with a type class constraint.

For example:

delete (SProxy :: SProxy "x")
  :: forall r a. Lacks "x" r => { x :: a | r } -> { | r }

#rename Source

rename :: forall output inter input ty next prev. IsSymbol prev => IsSymbol next => Cons prev ty inter input => Lacks prev inter => Cons next ty inter output => Lacks next inter => SProxy prev -> SProxy next -> Record input -> Record output

Rename a property for a label which is specified using a value-level proxy for a type-level string.

Note that the type of the resulting row must lack the specified property. Since duplicate labels are allowed, this is checked with a type class constraint.

For example:

rename (SProxy :: SProxy "x") (SProxy :: SProxy "y")
  :: forall a r. Lacks "x" r => Lacks "y" r => { x :: a | r} -> { y :: a | r}

#equal Source

equal :: forall rs r. RowToList r rs => EqualFields rs r => Record r -> Record r -> Boolean

Check two records of the same type for equality.

#merge Source

merge :: forall r4 r3 r2 r1. Union r1 r2 r3 => Nub r3 r4 => Record r1 -> Record r2 -> Record r4

Merges two records with the first record's labels taking precedence in the case of overlaps.

For example:

merge { x: 1, y: "y" } { y: 2, z: true }
 :: { x :: Int, y :: String, z :: Boolean }

#union Source

union :: forall r3 r2 r1. Union r1 r2 r3 => Record r1 -> Record r2 -> Record r3

Merges two records with the first record's labels taking precedence in the case of overlaps. Unlike merge, this does not remove duplicate labels from the resulting record type. This can result in better inference for some pipelines, deferring the need for a Nub constraint.

For example:

union { x: 1, y: "y" } { y: 2, z: true }
 :: { x :: Int, y :: String, y :: Int, z :: Boolean }

#disjointUnion Source

disjointUnion :: forall r3 r2 r1. Union r1 r2 r3 => Nub r3 r3 => Record r1 -> Record r2 -> Record r3

Merges two records where no labels overlap. This restriction exhibits better inference than merge when the resulting record type is known, but one argument is not.

For example, hole ?help is inferred to have type { b :: Int } here:

disjoinUnion { a: 5 } ?help :: { a :: Int, b :: Int }

#nub Source

nub :: forall r2 r1. Nub r1 r2 => Record r1 -> Record r2

A coercion which removes duplicate labels from a record's type.

#EqualFields Source

class EqualFields (rs :: RowList) (row :: Row Type) | rs -> row where

Members

Instances