purescript-0.10.4: examples/passing/DerivingFunctor.purs
module Main where
import Prelude
import Control.Monad.Eff.Console (log)
import Test.Assert
type MyRecord a = { myField :: a }
data M f a
= M0 a (Array a)
| M1 Int
| M2 (f a)
| M3 { foo :: Int, bar :: a, baz :: f a }
| M4 (MyRecord a)
derive instance eqM :: (Eq (f a), Eq a) => Eq (M f a)
derive instance functorM :: Functor f => Functor (M f)
type MA = M Array
main = do
assert $ map show (M0 0 [1, 2] :: MA Int) == M0 "0" ["1", "2"]
assert $ map show (M1 0 :: MA Int) == M1 0
assert $ map show (M2 [0, 1] :: MA Int) == M2 ["0", "1"]
assert $ map show (M3 {foo: 0, bar: 1, baz: [2, 3]} :: MA Int) == M3 {foo: 0, bar: "1", baz: ["2", "3"]}
assert $ map show (M4 { myField: 42 }) == M4 { myField: "42" } :: MA String
log "Done"