packages feed

purescript-0.15.15: tests/purs/optimize/Symbols.purs

module Main where

import Data.Symbol (class IsSymbol, reflectSymbol)
import Prim.Row (class Cons)
import Record.Unsafe (unsafeGet, unsafeSet)
import Type.Proxy (Proxy(..))

get
  :: forall r r' l a
   . IsSymbol l
  => Cons l a r' r
  => Proxy l
  -> Record r
  -> a
get l r = unsafeGet (reflectSymbol l) r

set
  :: forall r r' l a
   . IsSymbol l
  => Cons l a r' r
  => Proxy l
  -> a
  -> Record r
  -> Record r
set l a r = unsafeSet (reflectSymbol l) a r

foo :: Proxy "foo"
foo = Proxy

bar :: Proxy "bar"
bar = Proxy

f :: Int -> Int
f n = get foo { foo: n }

g :: Int -> Int
g n = get bar { foo: 0, bar: n }

h :: Int -> { foo :: Int }
h n = set foo n { foo: 0 }