[make sure class specialization rules are fully saturated when it comes to type application
John Meacham <john@repetae.net>**20060224104329] hunk ./E/FromHs.hs 200
-    method classRecord methodName = as where
-        methodVar = tVr ( nameToInt methodName) ty
-        Identity (TVr {tvrType = ty},_) = findName methodName
+    method classRecord methodName | isJust _methodName = as where
+        methodVar = tVr (nameToInt methodName) ty
+        _methodName@(~(Just (TVr {tvrType = ty},_))) = findName methodName
hunk ./E/FromHs.hs 204
-        valToPat' (ELit (LitCons x ts t)) = ELit $ LitCons x [ EVar (tVr j (getType z)) | z <- ts | j <- [2,4 ..]]  t
-        valToPat' (EPi (TVr { tvrType =  a}) b)  = ELit $ LitCons tc_Arrow [ EVar (tVr j (getType z)) | z <- [a,b] | j <- [2,4 ..]]  eStar
+        valToPat' (ELit (LitCons x ts t)) = ELit $ LitCons x [ EVar (tVr j (getType z)) | z <- ts | j <- [2,4 ..], j `notElem` map tvrIdent args]  t
+        valToPat' (EPi (TVr { tvrType =  a}) b)  = ELit $ LitCons tc_Arrow [ EVar (tVr j (getType z)) | z <- [a,b] | j <- [2,4 ..], j `notElem` map tvrIdent args]  eStar
hunk ./E/FromHs.hs 208
-        rule t = emptyRule { ruleHead = methodVar, ruleArgs = [valToPat' (tipe t)], ruleBinds = [ t | ~(EVar t) <- vs], ruleBody = body, ruleUniq = (Module (show name),0), ruleName = toAtom $ "Rule.{" ++ show name ++ "}"}  where
-            name = ((instanceName methodName (getTypeCons t)))
+        (_ft,_:args') = fromPi ty
+        (args,_rargs) = span (sortStarLike . getType)  args'
+        rule t = emptyRule { ruleHead = methodVar, ruleArgs = valToPat' (tipe t):map EVar args, ruleBinds = [ t | ~(EVar t) <- vs] ++ args, ruleBody = foldl EAp body (map EVar args), ruleUniq = (Module (show name),0), ruleName = toAtom $ "Rule.{" ++ show name ++ "}"}  where
+            name = (instanceName methodName (getTypeCons t))
hunk ./E/FromHs.hs 218
+    method _ _ = []
hunk ./E/FromHs.hs 472
-            f n i t = (n,setProperties [prop_METHOD,prop_PLACEHOLDER] $ tVr i t, EPrim (primPrim ("Placeholder: " ++ show n)) [] t)
+            f n i t = (n,setProperties [prop_METHOD,prop_PLACEHOLDER] $ tVr i t, foldr ELam (EPrim (primPrim ("Placeholder: " ++ show n)) [] ft) args)  where
+                (ft',as) = fromPi t
+                (args,rargs) = span (sortStarLike . getType) as
+                ft :: E
+                ft = foldr EPi ft' rargs