我想定义一个多态的属性。对于一个非感性的例子,假设我想syn
大小的任何类型的列表(所以在实践中它只能是空列表):
ATTR Foo
SYN lst : {[a]}
(一个不太敏感的例子可能涉及一些类型类约束,或ST s (STRef s Something))
等。)
问题当然是,如果没有告诉UUAGC lst
应该是多态的,它会生成以下无效的Haskell代码:
type T_Foo = ( ([a]))
data Inh_Foo = Inh_Foo {}
data Syn_Foo = Syn_Foo {lst_Syn_Foo :: ([a])}
sem_Foo :: Foo -> T_Foo
那么我如何让UUAGC生成像
这样的东西type T_Foo a = ( ([a]))
data Inh_Foo a = Inh_Foo {}
data Syn_Foo a = Syn_Foo {lst_Syn_Foo :: ([a])}
sem_Foo :: Foo -> T_Foo a