packages feed

purescript-0.7.0.0: examples/passing/RowPolyInstanceContext.purs

module Main where

import Prelude

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"