@@ -146,17 +146,31 @@ module Prelude where
146 (==) :: a -> a -> Boolean
146 (==) :: a -> a -> Boolean
147 (/=) :: a -> a -> Boolean
147 (/=) :: a -> a -> Boolean
149+ foreign import refEq
150+ "function refEq(r1) {\
151+ \ return function(r2) {\
152+ \ return r1 === r2;\
154+ \}" :: forall a. a -> a -> Boolean
156+ foreign import refIneq
157+ "function refIneq(r1) {\
158+ \ return function(r2) {\
159+ \ return r1 !== r2;\
161+ \}" :: forall a. a -> a -> Boolean
149 instance eqString :: Eq String where
163 instance eqString :: Eq String where
150− (==) = Data.Eq.Unsafe.refEq
164+ (==) = refEq
151− (/=) = Data.Eq.Unsafe.refIneq
165+ (/=) = refIneq
153 instance eqNumber :: Eq Number where
167 instance eqNumber :: Eq Number where
154− (==) = Data.Eq.Unsafe.refEq
168+ (==) = refEq
155− (/=) = Data.Eq.Unsafe.refIneq
169+ (/=) = refIneq
157 instance eqBoolean :: Eq Boolean where
171 instance eqBoolean :: Eq Boolean where
158− (==) = Data.Eq.Unsafe.refEq
172+ (==) = refEq
159− (/=) = Data.Eq.Unsafe.refIneq
173+ (/=) = refIneq
161 instance eqArray :: (Eq a) => Eq [a] where
175 instance eqArray :: (Eq a) => Eq [a] where
162 (==) [] [] = true
176 (==) [] [] = true
@@ -321,39 +335,15 @@ module Prelude where
322module Data.Eq where
336module Data.Eq where
324− import qualified Data.Eq.Unsafe as Unsafe
326 data Ref a = Ref a
338 data Ref a = Ref a
328 liftRef :: forall a b. (a -> a -> b) -> Ref a -> Ref a -> b
340 liftRef :: forall a b. (a -> a -> b) -> Ref a -> Ref a -> b
329 liftRef f (Ref x) (Ref y) = f x y
341 liftRef f (Ref x) (Ref y) = f x y
331− refEq :: forall a. Ref a -> Ref a -> Boolean
332− refEq = liftRef Unsafe.refEq
334− refIneq :: forall a. Ref a -> Ref a -> Boolean
335− refIneq = liftRef Unsafe.refIneq
337 instance eqRef :: Eq (Ref a) where
343 instance eqRef :: Eq (Ref a) where
338− (==) = refEq
344+ (==) = liftRef refEq
339− (/=) = refIneq
345+ (/=) = liftRef refIneq
341−module Data.Eq.Unsafe where
343− foreign import refEq
344− "function refEq(r1) {\
345− \ return function(r2) {\
346− \ return r1 === r2;\
348− \}" :: forall a. a -> a -> Boolean
350− foreign import refIneq
351− "function refIneq(r1) {\
352− \ return function(r2) {\
353− \ return r1 !== r2;\
355− \}" :: forall a. a -> a -> Boolean
357module Control.Monad.Eff where
347module Control.Monad.Eff where
359 foreign import data Eff :: # ! -> * -> *
349 foreign import data Eff :: # ! -> * -> *