next up previous contents
Next: Module Projection Up: Static Semantics Previous: Signature Compatibility   Contents

Module Typing

We use a helper function $ \mathsf{sigOf}$ , which converts declarations and sequences of declarations into their principal signature items and sequences of signature items, respectively.

$\displaystyle \infer{\Gamma \vdash M : S}{
\Gamma \vdash M : S'
& \Gamma \vda...
...ne{d} \leadsto \Gamma'
}
\quad \infer{\Gamma \vdash X : S}{
X : S \in \Gamma
}$

$\displaystyle \infer{\Gamma \vdash M.X : S}{
\Gamma \vdash M : \mathsf{sig} \;...
...; \mathsf{end}
& \mathsf{proj}(M, \overline{s}, \mathsf{structure} \; X) = S
}$

$\displaystyle \infer{\Gamma \vdash M_1(M_2) : [X \mapsto M_2]S_2}{
\Gamma \vda...
...ma \vdash S_1
& \Gamma, X : S_1 \vdash S_2
& \Gamma, X : S_1 \vdash M : S_2
}$


$\displaystyle \mathsf{sigOf}(\cdot)$ $\displaystyle =$ $\displaystyle \cdot$  
$\displaystyle \mathsf{sigOf}(s \; \overline{s'})$ $\displaystyle =$ $\displaystyle \mathsf{sigOf}(s) \; \mathsf{sigOf}(\overline{s'})$  
       
$\displaystyle \mathsf{sigOf}(\mathsf{con} \; x :: \kappa = c)$ $\displaystyle =$ $\displaystyle \mathsf{con} \; x :: \kappa = c$  
$\displaystyle \mathsf{sigOf}(\mathsf{datatype} \; x \; \overline{y} = \overline{dc})$ $\displaystyle =$ $\displaystyle \mathsf{datatype} \; x \; \overline{y} = \overline{dc}$  
$\displaystyle \mathsf{sigOf}(\mathsf{datatype} \; x = \mathsf{datatype} \; M.z)$ $\displaystyle =$ $\displaystyle \mathsf{datatype} \; x = \mathsf{datatype} \; M.z$  
$\displaystyle \mathsf{sigOf}(\mathsf{val} \; x : \tau = e)$ $\displaystyle =$ $\displaystyle \mathsf{val} \; x : \tau$  
$\displaystyle \mathsf{sigOf}(\mathsf{val} \; \mathsf{rec} \; \overline{x : \tau = e})$ $\displaystyle =$ $\displaystyle \overline{\mathsf{val} \; x : \tau}$  
$\displaystyle \mathsf{sigOf}(\mathsf{structure} \; X : S = M)$ $\displaystyle =$ $\displaystyle \mathsf{structure} \; X : S$  
$\displaystyle \mathsf{sigOf}(\mathsf{signature} \; X = S)$ $\displaystyle =$ $\displaystyle \mathsf{signature} \; X = S$  
$\displaystyle \mathsf{sigOf}(\mathsf{open} \; M)$ $\displaystyle =$ $\displaystyle \mathsf{include} \; S \textrm{ (where $\Gamma \vdash M : S$)}$  
$\displaystyle \mathsf{sigOf}(\mathsf{constraint} \; c_1 \sim c_2)$ $\displaystyle =$ $\displaystyle \mathsf{constraint} \; c_1 \sim c_2$  
$\displaystyle \mathsf{sigOf}(\mathsf{open} \; \mathsf{constraints} \; M)$ $\displaystyle =$ $\displaystyle \cdot$  
$\displaystyle \mathsf{sigOf}(\mathsf{table} \; x : c)$ $\displaystyle =$ $\displaystyle \mathsf{table} \; x : c$  
$\displaystyle \mathsf{sigOf}(\mathsf{view} \; x = e)$ $\displaystyle =$ $\displaystyle \mathsf{view} \; x : c \textrm{ (where $\Gamma \vdash e : \mathsf...
...ery} \; [] \; [] \; (\mathsf{map} \; (\lambda \_ \Rightarrow []) \; c') \; c$)}$  
$\displaystyle \mathsf{sigOf}(\mathsf{sequence} \; x)$ $\displaystyle =$ $\displaystyle \mathsf{sequence} \; x$  
$\displaystyle \mathsf{sigOf}(\mathsf{cookie} \; x : \tau)$ $\displaystyle =$ $\displaystyle \mathsf{cookie} \; x : \tau$  
$\displaystyle \mathsf{sigOf}(\mathsf{style} \; x)$ $\displaystyle =$ $\displaystyle \mathsf{style} \; x$  


$\displaystyle \mathsf{selfify}(M, \cdot)$ $\displaystyle =$ $\displaystyle \cdot$  
$\displaystyle \mathsf{selfify}(M, s \; \overline{s'})$ $\displaystyle =$ $\displaystyle \mathsf{selfify}(M, s) \; \mathsf{selfify}(M, \overline{s'})$  
       
$\displaystyle \mathsf{selfify}(M, \mathsf{con} \; x :: \kappa)$ $\displaystyle =$ $\displaystyle \mathsf{con} \; x :: \kappa = M.x$  
$\displaystyle \mathsf{selfify}(M, \mathsf{con} \; x :: \kappa = c)$ $\displaystyle =$ $\displaystyle \mathsf{con} \; x :: \kappa = c$  
$\displaystyle \mathsf{selfify}(M, \mathsf{datatype} \; x \; \overline{y} = \overline{dc})$ $\displaystyle =$ $\displaystyle \mathsf{datatype} \; x \; \overline{y} = \mathsf{datatype} \; M.x$  
$\displaystyle \mathsf{selfify}(M, \mathsf{datatype} \; x = \mathsf{datatype} \; M'.z)$ $\displaystyle =$ $\displaystyle \mathsf{datatype} \; x = \mathsf{datatype} \; M'.z$  
$\displaystyle \mathsf{selfify}(M, \mathsf{val} \; x : \tau)$ $\displaystyle =$ $\displaystyle \mathsf{val} \; x : \tau$  
$\displaystyle \mathsf{selfify}(M, \mathsf{structure} \; X : S)$ $\displaystyle =$ $\displaystyle \mathsf{structure} \; X : \mathsf{selfify}(M.X, \overline{s}) \te...
... (where $\Gamma \vdash S \equiv \mathsf{sig} \; \overline{s} \; \mathsf{end}$)}$  
$\displaystyle \mathsf{selfify}(M, \mathsf{signature} \; X = S)$ $\displaystyle =$ $\displaystyle \mathsf{signature} \; X = S$  
$\displaystyle \mathsf{selfify}(M, \mathsf{include} \; S)$ $\displaystyle =$ $\displaystyle \mathsf{include} \; S$  
$\displaystyle \mathsf{selfify}(M, \mathsf{constraint} \; c_1 \sim c_2)$ $\displaystyle =$ $\displaystyle \mathsf{constraint} \; c_1 \sim c_2$  
$\displaystyle \mathsf{selfify}(M, \mathsf{class} \; x :: \kappa)$ $\displaystyle =$ $\displaystyle \mathsf{class} \; x :: \kappa = M.x$  
$\displaystyle \mathsf{selfify}(M, \mathsf{class} \; x :: \kappa = c)$ $\displaystyle =$ $\displaystyle \mathsf{class} \; x :: \kappa = c$  


next up previous contents
Next: Module Projection Up: Static Semantics Previous: Signature Compatibility   Contents
2014-07-14