{-# LANGUAGE ExistentialQuantification #-}
data ForallFunc
= forall a
. Eq a
=> Forall
(Value
-> a
)
unpackA (A int) = int
equalityTest
:: Value
-> Value
-> ForallFunc
-> Bool equalityTest arg1 arg2 (Forall unpacker) =
let a1 = unpacker arg1
a2 = unpacker arg2 in
a1 == a2
main
= putStrLn $ show $ equalityTest
(A
1) (A
1) (Forall unpackA
)
ey0jIExBTkdVQUdFIEV4aXN0ZW50aWFsUXVhbnRpZmljYXRpb24gIy19CgpkYXRhIFZhbHVlID0gQSBJbnQKCmRhdGEgRm9yYWxsRnVuYyA9IGZvcmFsbCBhLiBFcSBhID0+IEZvcmFsbCAoVmFsdWUgLT4gYSkgCgp1bnBhY2tBIChBIGludCkgPSBpbnQKCmVxdWFsaXR5VGVzdCA6OiBWYWx1ZSAtPiBWYWx1ZSAtPiBGb3JhbGxGdW5jIC0+IEJvb2wgICAgICAgICAgICAKZXF1YWxpdHlUZXN0IGFyZzEgYXJnMiAoRm9yYWxsIHVucGFja2VyKSA9CiAgbGV0IGExID0gdW5wYWNrZXIgYXJnMQogICAgICBhMiA9IHVucGFja2VyIGFyZzIgaW4KICAgIGExID09IGEyCgptYWluID0gcHV0U3RyTG4gJCBzaG93ICQgZXF1YWxpdHlUZXN0IChBIDEpIChBIDEpIChGb3JhbGwgdW5wYWNrQSk=