我有一个data
类型:
data BuildException a = KillBuild JobID a Stage
| FailBuild JobID a Stage
| CancelBuild JobID a Stage
| StopBuild JobID a Stage
deriving Typeable
Run Code Online (Sandbox Code Playgroud)
其中a必须有一个Foo类的实例.我记得读过(在RWH中,也许)虽然可能在data
定义中有类约束,但这是不可取的.那么这样做的正确方法是什么?
只需对需要它的函数应用类型约束.例如:
makeException :: Foo a => String -> BuildException a
Run Code Online (Sandbox Code Playgroud)
甚至可能存在一些不需要Foo
约束的函数,这可能使API的客户端可以使用它的子集而无需定义Foo
约束!如果它是数据记录定义的一部分,这是不可能的.