abstract Tram = PredefAbs ** {

cat
  Dep ;    -- from here, from Angered
  Dest ;   -- to here, to Angered
  Query ;  -- message sent to the dialogue manager: sequentialized
  Input ;  -- user input: parallel text and clicks
  Click ;  -- map clicks

fun
  QInput : Input -> Query ; -- sequentialize user input

fun
  GoFromTo  : Dep  -> Dest -> Input ; -- user input "want to go from a to b"
  ComeToFrom: Dest -> Dep  -> Input ; -- user input "want to come to a from b"
  ComeFrom  : Dep  -> Input ;         -- user input "want to come from x (to where I'm now)
  GoTo      : Dest -> Input ;         -- user input "want to go to x (from where I'm now)

  DepClick  : Click -> Dep ;          -- "from here" with click
  DestClick : Click -> Dest ;         -- "to here" with click
  DepHere   : Dep ;                   -- "from here" indexical
  DestHere  : Dest ;                  -- "to here" indexical
  DepNamed  : String -> Dep ;         -- from a place name
  DestNamed : String -> Dest ;        -- to a place name

  CCoord    : Int -> Int -> Click ;

--- the syntax of here (prep + adverb, not prep + np) prevent these
--  Place ;  -- any way to identify a place: name, click, or indexical "here"
--  PClick   : Click -> Place ;          -- click associated with a "here"
--  PHere    : Place ;                   -- indexical "here", without a click

--  FromThisPlace : Dep ;               -- "from this place"
--  ToThisPlace   : Dest ;              -- "to this place"

}
