2016-06-01 4 views
1

У меня есть очень большая подпись с двумя абстрактными типами:Учитывая подпись с двумя абстрактными типами, определяют подсигнатуру, что делает их равными

signature GENERAL_FOO_BAR = 
sig 
    type foo 
    type bar 
    (* lots of stuff here *) 
end 

Я хочу объявить подсигнатуры GENERAL_FOO_BAR, где два абстрактных типов идентифицируются, но ни одна из следующих попыток не работает:

signature SPECIAL_FOO_BAR = GENERAL_FOO_BAR 
    where type foo = bar 

signature SPECIAL_FOO_BAR = GENERAL_FOO_BAR 
    sharing type foo = bar 

было бы очень громоздким использовать фиктивный тип следующим образом:

signature SPECIAL_FOO_BAR = 
sig 
    type both 
    include GENERAL_FOO_BAR 
    where type foo = both 
    where type bar = both 
end 

Поскольку это заставляет любого, кто хочет реализовать SPECIAL_FOO_BAR, ну, определите тип фиктивного типа. Есть ли лучшая альтернатива?

ответ

2

Вам не нужно быть настолько откровенным о «подсигналах». Вот простой пример «подсигналов»:

signature F = 
sig 
    type foo 
    type bar 
end 

signature G = 
sig 
    type foo = int 
    type bar = string 
end 

structure C : G = 
struct 
    type foo = int 
    type bar = string 
end 

structure D : F = C 
+0

Мой 'F' очень * очень большой. Я бы не хотел его дублировать. На самом деле, мне даже не нравится «включать», но здесь это сэкономит много места. – pyon

 Смежные вопросы

  • Нет связанных вопросов^_^