我想定义一个支持显式未实例化情况的多态的数据系列:
data family Foo a
-- handles some specific case
data instance Foo Int = CreateInt Int Int String
-- handles all other cases
data instance Foo bar = CreateBar bar
Run Code Online (Sandbox Code Playgroud)
这可能吗?
使用封闭式家庭.不幸的是,这需要一个额外的newtype包装器:
newtype Foo a = CreateFoo {getFoo :: Foo' a}
type family Foo' a where
Foo' Int = IntFoo
Foo' bar = Barbar bar
data IntFoo = CreateInt Int Int String
data Barbar bar = CreateBar bar
Run Code Online (Sandbox Code Playgroud)