git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix type class lookup
3607996Phil Freeman
examples/passing/TypeClasses.purs+19−19
@@ -1,43 +1,33 @@
1module TypeClasses where
1module TypeClasses where
2
2
3−import Prelude (($))
3+import Prelude
4−
5−class Show a where
6− show :: a -> String
7−
8−instance Show String where
9− show s = s
10
4
11test1 = \_ -> show "testing"
5test1 = \_ -> show "testing"
12
6
13−f :: forall a. (TypeClasses.Show a) => a -> String
7+f :: forall a. (Prelude.Show a) => a -> String
14f x = show x
8f x = show x
15
9
16test2 = \_ -> f "testing"
10test2 = \_ -> f "testing"
17
11
18−test7 :: forall a. (Show a) => a -> String
12+test7 :: forall a. (Prelude.Show a) => a -> String
19test7 = show
13test7 = show
20
14
21test8 = \_ -> show $ "testing"
15test8 = \_ -> show $ "testing"
22
16
23data Data a = Data a
17data Data a = Data a
24
18
25−instance (TypeClasses.Show a) => TypeClasses.Show (Data a) where
19+instance (Prelude.Show a) => Prelude.Show (Data a) where
26 show (Data a) = "Data (" ++ show a ++ ")"
20 show (Data a) = "Data (" ++ show a ++ ")"
27
21
28test3 = \_ -> show (Data "testing")
22test3 = \_ -> show (Data "testing")
29
23
30−class Monad m where
31− ret :: forall a. a -> m a
32− (>>=) :: forall a b. m a -> (a -> m b) -> m b
33−
34−instance TypeClasses.Monad Data where
24+instance Prelude.Monad Data where
35 ret = Data
25 ret = Data
36 (>>=) (Data a) f = f a
26 (>>=) (Data a) f = f a
37
27
38data Maybe a = Nothing | Just a
28data Maybe a = Nothing | Just a
39
29
40−instance TypeClasses.Monad Maybe where
30+instance Prelude.Monad Maybe where
41 ret = Just
31 ret = Just
42 (>>=) Nothing _ = Nothing
32 (>>=) Nothing _ = Nothing
43 (>>=) (Just a) f = f a
33 (>>=) (Just a) f = f a
@@ -49,20 +39,30 @@ test5 = \_ -> Just 1 >>= \n -> ret (n + 1)
49
39
50module TypeClasses2 where
40module TypeClasses2 where
51
41
42+import Prelude
52import TypeClasses
43import TypeClasses
53
44
54−instance (TypeClasses.Show a) => TypeClasses.Show [a] where
45+instance (Prelude.Show a) => Prelude.Show [a] where
55 show [] = "[]"
46 show [] = "[]"
56− show (x:xs) = TypeClasses.show x ++ ", " ++ TypeClasses.show xs
47+ show (x:xs) = show x ++ ", " ++ show xs
57
48
58test6 = \_ -> show ["testing"]
49test6 = \_ -> show ["testing"]
59
50
60−instance TypeClasses.Monad (->) r where
51+instance Prelude.Monad (->) r where
61 ret a r = a
52 ret a r = a
62 (>>=) f g r = g (f r) r
53 (>>=) f g r = g (f r) r
54+
55+ask r = r
56+
57+runReader r f = f r
58+
59+test9 _ = runReader 0 $ do
60+ n <- ask
61+ ret $ n + 1
63
62
64module Main where
63module Main where
65
64
65+import Prelude
66import TypeClasses
66import TypeClasses
67
67
68main = Trace.trace (test7 "Done")
68main = Trace.trace (test7 "Done")
src/Language/PureScript/TypeChecker/Types.hs+1
@@ -258,6 +258,7 @@ typeHeadsAreEqual _ _ Number Number = Just []
258typeHeadsAreEqual _ _ Boolean Boolean = Just []
258typeHeadsAreEqual _ _ Boolean Boolean = Just []
259typeHeadsAreEqual _ _ (Skolem s1) (Skolem s2) | s1 == s2 = Just []
259typeHeadsAreEqual _ _ (Skolem s1) (Skolem s2) | s1 == s2 = Just []
260typeHeadsAreEqual _ _ Array Array = Just []
260typeHeadsAreEqual _ _ Array Array = Just []
261+typeHeadsAreEqual _ _ Function Function = Just []
261typeHeadsAreEqual m e (TypeConstructor c1) (TypeConstructor c2) | typeConstructorsAreEqual e m c1 c2 = Just []
262typeHeadsAreEqual m e (TypeConstructor c1) (TypeConstructor c2) | typeConstructorsAreEqual e m c1 c2 = Just []
262typeHeadsAreEqual m e (TypeApp h1 (TypeVar v)) (TypeApp h2 arg) = (:) (v, arg) <$> typeHeadsAreEqual m e h1 h2
263typeHeadsAreEqual m e (TypeApp h1 (TypeVar v)) (TypeApp h2 arg) = (:) (v, arg) <$> typeHeadsAreEqual m e h1 h2
263typeHeadsAreEqual m e t1@(TypeApp _ _) t2@(TypeApp _ (TypeVar _)) = typeHeadsAreEqual m e t2 t1
264typeHeadsAreEqual m e t1@(TypeApp _ _) t2@(TypeApp _ (TypeVar _)) = typeHeadsAreEqual m e t2 t1