Record
- Package
- purescript-record
- Repository
- purescript/purescript-record
#set Source
set :: forall proxy r1 r2 r l a b. IsSymbol l => Cons l a r r1 => Cons l b r r2 => proxy 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 (Proxy :: Proxy "x")
:: forall r a b. a -> { x :: b | r } -> { x :: a | r }
#modify Source
modify :: forall proxy r1 r2 r l a b. IsSymbol l => Cons l a r r1 => Cons l b r r2 => proxy 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 (Proxy :: Proxy "x")
:: forall r a b. (a -> b) -> { x :: a | r } -> { x :: b | r }
#insert Source
insert :: forall proxy r1 r2 l a. IsSymbol l => Lacks l r1 => Cons l a r1 r2 => proxy 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 (Proxy :: Proxy "x")
:: forall r a. Lacks "x" r => a -> { | r } -> { x :: a | r }
#delete Source
delete :: forall proxy r1 r2 l a. IsSymbol l => Lacks l r1 => Cons l a r1 r2 => proxy 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 (Proxy :: Proxy "x")
:: forall r a. Lacks "x" r => { x :: a | r } -> { | r }
#rename Source
rename :: forall proxy prev next ty input inter output. IsSymbol prev => IsSymbol next => Cons prev ty inter input => Lacks prev inter => Cons next ty inter output => Lacks next inter => proxy prev -> proxy 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 (Proxy :: Proxy "x") (Proxy :: Proxy "y")
:: forall a r. Lacks "x" r => Lacks "y" r => { x :: a | r} -> { y :: a | r}
#union Source
union :: forall r1 r2 r3. 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 r1 r2 r3. 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:
disjointUnion { a: 5 } ?help :: { a :: Int, b :: Int }
#EqualFields Source
class EqualFields (rs :: RowList Type) (row :: Row Type) | rs -> row where
Members
equalFields :: forall rlproxy. rlproxy rs -> Record row -> Record row -> Boolean
Instances
(IsSymbol name, Eq ty, Cons name ty tailRow row, EqualFields tail row) => EqualFields (Cons name ty tail) row
EqualFields Nil row
- Modules
- Record
- Record.
Builder - Record.
Unsafe. Union