purescript-0.13.4: tests/purs/passing/3558-UpToDateDictsForHigherOrderFns.purs
module Main where
import Prelude (Unit)
import Effect (Effect)
import Effect.Console (log)
import Record.Unsafe (unsafeGet)
import Type.Data.Symbol (class IsSymbol, SProxy, reflectSymbol)
import Type.Row (class Cons) as Row
newtype LBox row a = LBox (∀ r. (∀ lbl _1. Row.Cons lbl a _1 row ⇒ IsSymbol lbl ⇒ SProxy lbl → r) → r)
unLBox ∷ ∀ row a r. (∀ lbl _1. Row.Cons lbl a _1 row ⇒ IsSymbol lbl ⇒ SProxy lbl → r) → LBox row a → r
unLBox g (LBox f) = f g
-- Example 1
lboxIdentity ∷ ∀ row a. LBox row a → LBox row a
lboxIdentity = unLBox \lbl → LBox \f → f lbl
-- Example 2
read ∷ ∀ row a. Record row → LBox row a → a
read rec = unLBox \lbl → get lbl rec
get
:: forall r r' l a
. IsSymbol l
=> Row.Cons l a r' r
=> SProxy l
-> Record r
-> a
get l r = unsafeGet (reflectSymbol l) r
main :: Effect Unit
main = log "Done"