Haskell中的多态数据族

Pet*_*lys 2 haskell

我想定义一个支持显式未实例化情况的多态的数据系列:

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)

这可能吗?

lef*_*out 6

使用封闭式家庭.不幸的是,这需要一个额外的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)