-- Full .gfm format: multi-module files (see Words.gfm for a baseline format) -- The compiler recognizes the suffix .gfm and a file for each module. -- Food.gf, FoodEng.gf, FoodIta.gf -- The first non-comment line must give a list of lang names for the top modules. -- This modules are the ones imported in 'import Food.gfm'. -- Their prefix comes from this file. -- This file must be UTF-8 encoded. > langs Eng Ita abstract Food = { cat Phrase ; Item ; Kind ; Quality ; flags startcat = Phrase ; fun Is : Item -> Quality -> Phrase ; This, That : Kind -> Item ; QKind : Quality -> Kind -> Kind ; Wine, Cheese, Fish : Kind ; Very : Quality -> Quality ; Fresh, Warm, Italian, Expensive, Delicious, Boring : Quality ; } concrete FoodEng of Food = { lincat Phrase, Item, Kind, Quality = {s : Str} ; lin Is item quality = {s = item.s ++ "is" ++ quality.s} ; This kind = {s = "this" ++ kind.s} ; That kind = {s = "that" ++ kind.s} ; QKind quality kind = {s = quality.s ++ kind.s} ; Wine = {s = "wine"} ; Cheese = {s = "cheese"} ; Fish = {s = "fish"} ; Very quality = {s = "very" ++ quality.s} ; Fresh = {s = "fresh"} ; Warm = {s = "warm"} ; Italian = {s = "Italian"} ; Expensive = {s = "expensive"} ; Delicious = {s = "delicious"} ; Boring = {s = "boring"} ; } concrete FoodIta of Food = { flags coding = utf8 ; lincat Phrase, Item, Kind, Quality = {s : Str} ; lin Is item quality = {s = item.s ++ "รจ" ++ quality.s} ; This kind = {s = "questo" ++ kind.s} ; That kind = {s = "quel" ++ kind.s} ; QKind quality kind = {s = kind.s ++ quality.s} ; Wine = {s = "vino"} ; Cheese = {s = "formaggio"} ; Fish = {s = "pesce"} ; Very quality = {s = "molto" ++ quality.s} ; Fresh = {s = "fresco"} ; Warm = {s = "caldo"} ; Italian = {s = "italiano"} ; Expensive = {s = "caro"} ; Delicious = {s = "delizioso"} ; Boring = {s = "noioso"} ; }