2009-09-29 9 views
1

Je veux placer la signature/structure de paire dans une structure, comme ceci:Signature à l'intérieur d'une structure

structure Outer :> OUTER = 
struct 
    signature INNER = 
    sig 
     ... 
    end 

    structure Inner :> INNER = 
    struct 
    ... 
    end 
end 

mais même des exemples les plus simples produit une erreur:

 
../test.sml:1.18-2.6 Error: syntax error: replacing STRUCT with EQUALOP 
../test.sml:5.6 Error: syntax error found at END 

Il semble que les signatures ne sont pas autorisées à l'intérieur des structures. Quel est le meilleur moyen d'obtenir cette fonctionnalité?

Répondre

2

Bien que les structures imbriquent dans SML, les signatures ne le font pas. La fonctionnalité que vous souhaitez atteindre n'est pas claire:

  • Le masquage d'une signature nommée est impossible.

  • Avoir la signature INNER dépendent des types déclarés dans la structure Outer est obtenue par fibration (la clause where type). Il y a une section sur la fibration dans le tutoriel de Harper et Pierce dans le livre de Benjamin Pierce sur les types avancés dans les langages de programmation.