@@ -292,41 +292,30 @@ type CtorDups = Dups.Dict (Map.Map ModuleName.Canonical Env.Ctor)
292292
293293canonicalizeAlias :: Env.Env -> Valid.Alias -> Result i w ( (N.Name, Can.Alias), CtorDups )
294294canonicalizeAlias env@(Env.Env home _ _ _ _ _ _ _) (Valid.Alias _ (A.At region name) args tipe) =
295− case tipe of
296− A.At _ (Src.TRecord fields Nothing) ->
297− do cfields <- canonicalizeFields env fields
298− fieldDict <- Dups.checkFields cfields
299−
300− let
301− addArg (_, Can.FieldType _ t1) t2 = Can.TLambda t1 t2
302− recordType = Can.TRecord fieldDict Nothing
303− vars = map A.toValue args
304− ctor = Env.RecordCtor home vars (foldr addArg recordType cfields)
305−
306− Result.ok
307− ( (name, Can.Alias vars recordType)
308− , Dups.one name region (Map.singleton home ctor)
309− )
310−
311− _ ->
312− do ctipe <- Type.canonicalize env tipe
313− Result.ok
314− ( (name, Can.Alias (map A.toValue args) ctipe)
315− , Dups.none
316− )
317−
295+ do let vars = map A.toValue args
296+ ctipe <- Type.canonicalize env tipe
297+ Result.ok
298+ ( (name, Can.Alias vars ctipe)
299+ ,
300+ case ctipe of
301+ Can.TRecord fields Nothing ->
302+ Dups.one name region (Map.singleton home (toRecordCtor home name vars fields))
303+
304+ _ ->
305+ Dups.none
306+ )
318307
319−canonicalizeFields :: Env.Env -> [(A.Located N.Name, Src.Type)] -> Result i w [(A.Located N.Name, Can.FieldType)]
320−canonicalizeFields env fields =
308+toRecordCtor :: ModuleName.Canonical -> N.Name -> [N.Name] -> Map.Map N.Name Can.FieldType -> Env.Ctor
309+toRecordCtor home name vars fields =
321310 let
322− len =
323− fromIntegral (length fields)
324−
325− canonicalizeField index (name, srcType) =
326− do tipe <- Type.canonicalize env srcType
327− return (name, Can.FieldType index tipe)
311+ avars = map (\var -> (var, Can.TVar var)) vars
312+ alias =
313+ foldr
314+ (\(_,t1) t2 -> Can.TLambda t1 t2)
315+ (Can.TAlias home name avars (Can.Filled (Can.TRecord fields Nothing)))
316+ (Can.fieldsToList fields)
328317 in
329− sequenceA (zipWith canonicalizeField [0..len] fields)
318+ Env.RecordCtor home vars alias
330319
331320
332321