Commit 2c4c6271 authored by Gabor Greif's avatar Gabor Greif 💬


parent 7a82b776
......@@ -333,7 +333,7 @@ This ultimately desugars to something like this:
(fm::a->a,gm:Any->Any) -> fm
...similarly for g...
The abe_wrap field deals with impedence-matching between
The abe_wrap field deals with impedance-matching between
(/\a b. case tup a b of { (f,g) -> f })
and the thing we really want, which may have fewer type
variables. The action happens in TcBinds.mkExport.
......@@ -651,7 +651,7 @@ mkExport prag_fn qtvs inferred_theta (poly_name, mb_sig, mono_id)
; traceTc "mkExport: check sig"
(vcat [ ppr poly_name, ppr sel_poly_ty, ppr (idType poly_id) ])
-- Perform the impedence-matching and ambiguity check
-- Perform the impedance-matching and ambiguity check
-- right away. If it fails, we want to fail now (and recover
-- in tcPolyBinds). If we delay checking, we get an error cascade.
-- Remember we are in the tcPolyInfer case, so the type envt is
......@@ -786,9 +786,9 @@ Examples that might fail:
- an inferred type that includes unboxed tuples
However we don't do the ambiguity check (checkValidType omits it for
InfSigCtxt) because the impedence-matching stage, which follows
InfSigCtxt) because the impedance-matching stage, which follows
immediately, will do it and we don't want two error messages.
Moreover, because of the impedence matching stage, the ambiguity-check
Moreover, because of the impedance matching stage, the ambiguity-check
suggestion of -XAllowAmbiguiousTypes will not work.
......@@ -812,7 +812,7 @@ The types we really want for f and g are
f :: forall a. (Eq a, Num a) => a -> Bool -> Bool
g :: forall b. [b] -> Bool -> Bool
We can get these by "impedence matching":
We can get these by "impedance matching":
tuple :: forall a b. (Eq a, Num a) => (a -> Bool -> Bool, [b] -> Bool -> Bool)
tuple a b d1 d1 = let ...bind f_mono, g_mono in (f_mono, g_mono)
......@@ -822,9 +822,9 @@ We can get these by "impedence matching":
Suppose the shared quantified tyvars are qtvs and constraints theta.
Then we want to check that
f's polytype is more polymorphic than forall qtvs. theta => f_mono_ty
and the proof is the impedence matcher.
and the proof is the impedance matcher.
Notice that the impedence matcher may do defaulting. See Trac #7173.
Notice that the impedance matcher may do defaulting. See Trac #7173.
It also cleverly does an ambiguity check; for example, rejecting
f :: F a -> a
......@@ -1498,7 +1498,7 @@ that the type variables bound in the signature will scope over the body.
What about the check that the instance method signature is more
polymorphic than the instantiated class method type? We just do a
tcSubType call in mkMethIds, and use the HsWrapper thus generated in
the method AbsBind. It's very like the tcSubType impedence-matching
the method AbsBind. It's very like the tcSubType impedance-matching
call in mkExport. We have to pass the HsWrapper into
......@@ -397,7 +397,7 @@ Two cases, dealt with by the LetPat case of tcPatBndr
we want to bind a cloned, local version of the variable, with the
type given by the pattern context, *not* by the signature (even if
there is one; see Trac #7268). The mkExport part of the
generalisation step will do the checking and impedence matching
generalisation step will do the checking and impedance matching
against the signature.
* If for some some reason we are not generalising (plan = NoGen), the
......@@ -734,7 +734,7 @@ checkHiBootIface' :: [ClsInst] -> TypeEnv -> [AvailInfo]
-- Variant which doesn't require a full TcGblEnv; you could get the
-- local components from another ModDetails.
-- We return a list of "impedence-matching" bindings for the dfuns
-- We return a list of "impedance-matching" bindings for the dfuns
-- defined in the hs-boot file, such as
-- $fxEqT = $fEqT
-- We need these because the module and hi-boot file might differ in
......@@ -759,7 +759,7 @@ checkHiBootIface'
-- instances? We can't easily equate tycons...
-- Check instance declarations
-- and generate an impedence-matching binding
-- and generate an impedance-matching binding
; mb_dfun_prs <- mapM check_inst boot_insts
; failIfErrsM
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment