@@ -169,19 +169,21 @@ diff localizer context leftType rightType =
169 go = diff localizer
169 go = diff localizer
171 case (leftType, rightType) of
171 case (leftType, rightType) of
172− (Type.Lambda _ _, Type.Lambda _ _) ->
172+ (Type.Aliased leftName leftArgs _, Type.Aliased rightName rightArgs _) | leftName == rightName ->
173− let
173+ docAppHelp localizer context leftName
174− leftParts = Type.collectLambdas leftType
174+ <$> sequenceA (zipWith (go App) (map snd leftArgs) (map snd rightArgs))
175− rightParts = Type.collectLambdas rightType
178− if length leftParts /= length rightParts then
176+ (Type.Aliased _ args real, _) ->
179− difference
177+ go context (Type.dealias args real) rightType
180− (docLambda context (map (docType localizer Func) leftParts))
181− (docLambda context (map (docType localizer Func) rightParts))
183− else
179+ (_, Type.Aliased _ args real) ->
184− docLambda context <$> sequenceA (zipWith (go Func) leftParts rightParts)
180+ go context leftType (Type.dealias args real)
182+ (Type.Lambda _ _, _) ->
183+ diffLambda localizer context leftType rightType
185+ (_, Type.Lambda _ _) ->
186+ diffLambda localizer context leftType rightType
186 (Type.Var x, Type.Var y) | x == y ->
188 (Type.Var x, Type.Var y) | x == y ->
187 pure (text x)
189 pure (text x)
@@ -216,16 +218,6 @@ diff localizer context leftType rightType =
217 diffRecord localizer leftFields leftExt rightFields rightExt
219 diffRecord localizer leftFields leftExt rightFields rightExt
219− (Type.Aliased leftName leftArgs _, Type.Aliased rightName rightArgs _) | leftName == rightName ->
220− docAppHelp localizer context leftName
221− <$> sequenceA (zipWith (go App) (map snd leftArgs) (map snd rightArgs))
223− (Type.Aliased _ args real, _) ->
224− go context (Type.dealias args real) rightType
226− (_, Type.Aliased _ args real) ->
227− go context leftType (Type.dealias args real)
229 (_, _) ->
221 (_, _) ->
230 difference
222 difference
231 (docType localizer context leftType)
223 (docType localizer context leftType)
@@ -238,6 +230,37 @@ difference leftDoc rightDoc =
236+diffLambda :: Localizer -> Context -> Type.Canonical -> Type.Canonical -> Diff Doc
237+diffLambda localizer context leftType rightType =
239+ leftArgs = reverse $ Type.collectLambdas leftType
240+ rightArgs = reverse $ Type.collectLambdas rightType
243+ map (dullyellow . docType localizer Func) types
245+ extraLefts = reverse $ extraToDoc $ drop (length rightArgs) leftArgs
246+ extraRights = reverse $ extraToDoc $ drop (length leftArgs) rightArgs
249+ reverse <$> sequenceA (zipWith (diff localizer Func) leftArgs rightArgs)
251+ docLambda context <$>
252+ case (extraLefts, extraRights, alignedArgDiff) of
256+ (_, _, Same docs) ->
257+ Diff (extraLefts ++ docs) (extraRights ++ docs)
259+ (_, _, Diff lefts rights) ->
260+ Diff (extraLefts ++ lefts) (extraRights ++ rights)
241-- RECORD DIFFS
264-- RECORD DIFFS