summaryrefslogtreecommitdiff
path: root/examples/phrasebook/Roles.gf
blob: f8f9c4aea0efd005163f7befa9bebc67a6abcbae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
resource Roles = {

param
  Gender = Male | Female ;
  Politeness = Polite | Familiar ;

oper
  RolePhrase : Type = {s : Politeness => Gender => Gender => Str} ;

  politeDistinct : (_,_ : Str) -> RolePhrase = \pol,fam -> {
    s = table {
      Polite   => \\_,_ => pol ;
      Familiar => \\_,_ => fam
      }
    } ;

  speakerDistinct : (_,_ : Str) -> RolePhrase = \mal,fem -> {
    s = \\p,s,h => case s of {
      Male   => mal ;
      Female => fem
      }
    } ;

  hearerDistinct : (_,_ : Str) -> RolePhrase = \mal,fem -> {
    s = \\p,s,h => case h of {
      Male   => mal ;
      Female => fem
      }
    } ;

  roleNeutral : Str -> RolePhrase = \s -> {
    s = \\_,_,_ => s
    } ;
}