purescript-0.6.7: examples/passing/RowPolyInstanceContext.purs
module Main where
class T s m 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
Debug.Trace.trace "Done"