diff options
| author | hallgren <hallgren@chalmers.se> | 2015-01-19 12:43:32 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2015-01-19 12:43:32 +0000 |
| commit | 7e1120d27144ea3432aa42862e88fd88df0dceaa (patch) | |
| tree | e52aebccc9443c83533c021f2ac6bfc21a82edad /src/compiler | |
| parent | e128139e8caa93c29d193ac215fade4e348cb1b6 (diff) | |
Translating linearization functions to Haskell: move a common record type to PGF.Haskell
Move the Haskell representation of the common linearization type {s:T} to the
shared module PGF.Haskell, so that the same overloaded projection function
proj_s can be used for all concrete syntaxes.
Diffstat (limited to 'src/compiler')
| -rw-r--r-- | src/compiler/GF/Compile/ConcreteToHaskell.hs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/compiler/GF/Compile/ConcreteToHaskell.hs b/src/compiler/GF/Compile/ConcreteToHaskell.hs index 93becd16e..daeb4dfb6 100644 --- a/src/compiler/GF/Compile/ConcreteToHaskell.hs +++ b/src/compiler/GF/Compile/ConcreteToHaskell.hs @@ -38,11 +38,16 @@ concrete2haskell opts gr cenv absname cnc modinfo = "--- Linearization types and linearization functions ---" $$ vcat (map ppDef defs) $$ "" $$ "--- Type classes for projection functions ---" $$ - vcat (map labelClass (S.toList (S.unions (map S.fromList rs)))) $$ "" $$ + vcat (map labelClass (S.toList labels)) $$ "" $$ "--- Record types ---" $$ - vcat (map recordType rs) + vcat (map recordType recs) where - rs = S.toList (S.insert [ident2label (identS "s")] (records rhss)) + labels = S.difference (S.unions (map S.fromList recs)) common_labels + recs = S.toList (S.difference (records rhss) common_records) + common_records = S.fromList [[label_s]] + common_labels = S.fromList [label_s] + label_s = ident2label (identS "s") + rhss = map (snd.snd) defs defs = sortBy (compare `on` fst) . concatMap (toHaskell gId gr absname cenv) . |
