forked from GitHub/gf-core
57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
concrete FoodsChi of Foods = open Prelude in {
|
|
flags coding = utf8 ;
|
|
lincat
|
|
Comment, Item = Str;
|
|
Kind = knd ;
|
|
Quality = qual ;
|
|
lin
|
|
Pred = (\itm, ql ->
|
|
case ql.hasVery of {
|
|
True => itm ++ "是 非 常" ++ ql.s ++ ql.p ;
|
|
False => itm ++ "是" ++ ql.s ++ ql.p } ) ;
|
|
This kind = "这" ++ kind.c ++ kind.m ++ kind.s ;
|
|
That kind = "那" ++ kind.c ++ kind.m ++ kind.s ;
|
|
These kind = "这" ++ "几" ++ kind.c ++ kind.m ++ kind.s ;
|
|
Those kind = "那" ++ "几" ++ kind.c ++ kind.m ++ kind.s ;
|
|
Mod = modifier ;
|
|
|
|
Wine = geKind "酒" "瓶" ;
|
|
Pizza = geKind "比 萨 饼" "张" ;
|
|
Cheese = geKind "奶 酪" "块";
|
|
Fish = geKind "鱼" "条";
|
|
|
|
Very = (\q -> {s = q.s ; p = q.p ; hasVery = True}) ;
|
|
Fresh = longQuality "新 鲜" ;
|
|
Warm = longQuality "温 热" ;
|
|
Italian = longQuality "意 大 利 式" ;
|
|
Expensive = longQuality "昂 贵" ;
|
|
Delicious = longQuality "美 味" ;
|
|
-- this technically translates to "unpalatable" instead of boring
|
|
Boring = longQuality "难 吃" ;
|
|
|
|
oper
|
|
-- lincat aliases
|
|
qual : Type = {s,p : Str ; hasVery : Bool} ;
|
|
knd : Type = {s,c,m : Str; hasMod : Bool} ;
|
|
|
|
-- Constructor functions
|
|
mkKind : Str -> Str -> knd = \s,c ->
|
|
{s = s ; c = c; m = ""; hasMod = False} ;
|
|
geKind : Str -> Str -> knd = \s,cl ->
|
|
mkKind s (classifier cl) ;
|
|
longQuality : Str -> qual = \s ->
|
|
{s = s ; p = "的" ; hasVery = False} ;
|
|
modifier : qual -> knd -> knd = \q,k ->
|
|
{ s = k.s ; c = k.c ; m = modJoin k.hasMod q k.m ;
|
|
hasMod = True } ;
|
|
|
|
-- Helper functions
|
|
classifier : Str -> Str = \s ->
|
|
case s of {"" => "个" ; _ => s };
|
|
modJoin : Bool -> qual -> Str -> Str = \bool, q,m ->
|
|
case bool of {
|
|
True => "又" ++ q.s ++ "又" ++ m ;
|
|
False => q.s ++ q.p } ;
|
|
|
|
}
|