@@ -152,7 +152,12 @@ extendPat env pat =
152152
153153 occurrences =
154154 HashSet. toList occurrencesSet
155+ in
156+ extendMany env occurrences
155157
158+ extendMany :: Environment v -> [Int ] -> Environment (Bound. Var Int v )
159+ extendMany env occurrences =
160+ let
156161 bindings =
157162 HashMap. fromList $
158163 zip occurrences $ freshLocals env
@@ -163,7 +168,7 @@ extendPat env pat =
163168 lookupVar i =
164169 case HashMap. lookup i bindings of
165170 Nothing ->
166- error " Unbound pattern variable"
171+ error " Language.Elm.Pretty unbound pattern variable"
167172
168173 Just v ->
169174 v
@@ -366,11 +371,18 @@ twoLineOperator qname =
366371definition :: Environment Void -> Definition -> Doc ann
367372definition env def =
368373 case def of
369- Definition. Constant (Name. Qualified _ name) t e ->
374+ Definition. Constant (Name. Qualified _ name) numTypeParams t e ->
370375 let
371- (names, body) = lambdas env e
376+ typeParams =
377+ [0 .. numTypeParams - 1 ]
378+
379+ typeEnv =
380+ extendMany env typeParams
381+
382+ (names, body) =
383+ lambdas env e
372384 in
373- pretty name <+> " :" <+> nest 4 (type_ env 0 t) <> line <>
385+ pretty name <+> " :" <+> nest 4 (type_ typeEnv 0 $ Bound. fromScope t) <> line <>
374386 (case names of
375387 [] ->
376388 pretty name <+> " ="
@@ -379,16 +391,30 @@ definition env def =
379391 pretty name <+> hsep (local <$> names) <+> " =" ) <>
380392 line <> indent 4 body
381393
382- Definition. Type (Name. Qualified _ name) constrs ->
383- " type" <+> pretty name <> line <>
394+ Definition. Type (Name. Qualified _ name) numParams constrs ->
395+ let
396+ params =
397+ [0 .. numParams - 1 ]
398+
399+ env' =
400+ extendMany env params
401+ in
402+ " type" <+> pretty name <+> hsep (local . locals env' . Bound. B <$> params) <> line <>
384403 indent 4 (" =" <+>
385404 mconcat
386405 (intersperse (line <> " | " )
387- [constructor c <+> hsep (type_ env (appPrec + 1 ) <$> ts) | (c, ts) <- constrs]))
406+ [constructor c <+> hsep (type_ env' (appPrec + 1 ) . Bound. fromScope <$> ts) | (c, ts) <- constrs]))
388407
389- Definition. Alias (Name. Qualified _ name) t ->
390- " type alias" <+> pretty name <+> " =" <> line <>
391- indent 4 (type_ env 0 t)
408+ Definition. Alias (Name. Qualified _ name) numParams t ->
409+ let
410+ params =
411+ [0 .. numParams - 1 ]
412+
413+ env' =
414+ extendMany env params
415+ in
416+ " type alias" <+> pretty name <+> hsep (local . locals env' . Bound. B <$> params) <+> " =" <> line <>
417+ indent 4 (type_ env' 0 $ Bound. fromScope t)
392418
393419-------------------------------------------------------------------------------
394420-- * Expressions
0 commit comments