purescript-0.12.0: tests/purs/passing/RowPolyInstanceContext.purs
module Main where
import Prelude
import Effect.Console (log)
class T s m | m -> s where
state :: (s -> s) -> m Unit
data S s a = S (s -> { new :: s, ret :: a })
instance st :: T s (S s) where
state f = S $ \s -> { new: f s, ret: unit }
test1 :: forall r . S { foo :: String | r } Unit
test1 = state $ \o -> o { foo = o.foo <> "!" }
test2 :: forall m r . T { foo :: String | r } m => m Unit
test2 = state $ \o -> o { foo = o.foo <> "!" }
main = do
let t1 = test1
let t2 = test2
log "Done"