A dobozok.
<boxdecl> ::= <prelude> <body>
<prelude> ::=
"box" <boxid>
"in" <inoutlist>
"out" <inoutlist>
[ "within" <constraint> ]
[ "handles" <exnidlist> ]
<inoutlist> ::= "(" <inout1> "," ... "," <inoutn> ")"
<inout> ::= <varids> "::" <type> [ "timeout" <cexpr> ]
<varids> ::= <varid1> "," ... "," <varidtn>
A HUME koordinációs egysége a doboz. A doboznak egyedi azonosítója van, amelyet a
prelude-jében adunk meg. A doboz be- és kimeneteire
ins és
outs-ként hivatkozunk. Ezek megadott hosszú
inout típusú sorozatok. Egy
inout típus bármilyen HUME típus lehet, kivéve a függvényeket és kivételeket. A doboz ki- és bemenetei a doboz
prelude-jében kerülnek megadásra.
A doboz belseje mintaillesztések halmazából áll, egy opcionális időtúllépés megadásával, hogy az összes lehetőséget lefedjük, továbbá kivételkezelés is megadható, mely minden végrehajtás során megjelenik a doboz belsejében.
Minden dobozbeli <match>-nek kell, hogy legyen:
egy minta része <patt>, melynek típusa megegyezik a bemenet deklarációjában megadottal
egy kifejező része <expr>, melynek típusa megegyezik a kimenet deklarációjában megadottal.
A magasszintű minták tartalmazhatják a * szimbólumot is. Ezen szimbólum használatának a célja, hogy mutassa, hogy a megfelelő bemenet se nem illeszkedik, se nem "nyelődött" el.
Az illesztés lehet szekvenciális (nem igazságos) vagy igazságos. Az illeszkedés sorrendejének szabálya: felülről lefelé az első olyan kerül kiválasztásra, ami teljes egészében illeszkedik a bemenettel. Ugyanakkor ez az egyszerű kiválsztaási szabály azt eredményezheti, hogy ugyanaz az eredmény kerül kiválasztásra mindig, ha ugyanaz a bemenet érkezik, és így előfordulhat, hogy bizonyos szabályok soha nem kerülnek kiválasztásra. Az igazságos illesztés ezzel szemben garantálná, hogy az egyes szabályok azonos valószínűséggel kerüljenek kiválasztásra.
<body> ::= ( "match" | "fair" )
<matches>
[ "timeout" <cexpr> ]
[ "handle" <handlers> ]