返回 >=> f 如何在哈斯克尔中工作?



特别是,我的问题是关于如何将其视为等价于f本身?

我们知道return的类型是::a -> m a>=>的类型是::(a -> m b) -> (b -> m c) -> (a -> m c)所以当我们把>=>应用于return和f时,会不会有类型不匹配,因为我们不会有(a -> m a) -> (b -> m c)分别作为return和f的类型,这意味着我们现在怎么能应用>=>呢?

让我们重命名一些类型变量以避免混淆:

return :: a -> m a
(>=>)  :: (b -> m c) -> (c -> m d) -> (b -> m d)

当我们应用(>=>) return时,我们需要使

(a -> m a) = (b -> m c)

(return类型和>=>的第一个参数的类型(。

因此我们有

a = b
a = c

(因此也是b = c(。

然后

(>=>) return :: (c -> m d) -> (b -> m d)
a = b
a = c

这是

(>=>) return :: (a -> m d) -> (a -> m d)

所以只要f :: a -> m d,我们就可以将(>=>) return应用于f并取回相同类型的值。

相关内容

  • 没有找到相关文章

最新更新