是否有类型受限制的风格"没什么"?

时间:2017-11-05 07:00:02

标签: haskell gadt

请考虑以下代码:

data T b where
  T :: Maybe (a -> b) -> a -> T b

g (T (Just f) x) = f x
g (T Nothing x) = x

这不能编译,我们在Nothing的{​​{1}}定义上收到错误。这是因为g不会阻止内部类型Nothing与外部可见类型a不同。

现在考虑这种替代方法:

b

这个编译没有问题。

这是另一个有趣的例子:

data Maybe' b a where
  Just' :: a -> Maybe' b a
  Nothing' :: Maybe' b b

data T' b where
  T' :: Maybe' (a -> a) (a -> b) -> a -> T' b

g' (T' (Just' f) x) = f x
g' (T' Nothing' x) = x

Hackage上是否已经提供了一个允许dotMaybe :: Maybe' (dummy1 -> dummy1) (b -> c) -> Maybe' (dummy2 -> dummy2) (a -> b) -> Maybe' (dummy2 -> dummy2) (a -> c) dotMaybe (Just' f) (Just' g) = Just' (f . g) dotMaybe (Just' f) Nothing' = Just' f dotMaybe Nothing' (Just' g) = Just' g dotMaybe Nothing' Nothing' = Nothing' 中演示的功能的软件包,或者我应该打包一些东西?我只是不想重新发明轮子。

0 个答案:

没有答案