module Main where import Prelude import Effect (Effect) import Effect.Console (log) import Data.Newtype (class Newtype, unwrap) class TypeEquals a b | a -> b, b -> a where coerce :: a -> b coerceBack :: b -> a instance refl :: TypeEquals a a where coerce = identity coerceBack = identity newtype RecordNewtype = RecordNewtype { x :: String } instance newtypeRecordNewtype :: TypeEquals inner { x :: String } => Newtype RecordNewtype inner where wrap = RecordNewtype <<< coerce unwrap (RecordNewtype rec) = coerceBack rec main :: Effect Unit main = log (unwrap (RecordNewtype { x: "Done" })).x