与forall的功能组成

时间:2014-08-12 01:50:16

标签: haskell function-composition

有人可以向我解释为什么以下内容无效吗?

foo :: Int -> ST s Int
foo = return

bar :: (forall s. ST s Int) -> Int
bar = runST

baz :: Int -> Int
baz = bar . foo

为`baz:

抛出错误
Couldn't match type `ST s0 Int' with `forall s. ST s Int'
Expected type: Int -> forall s. ST s Int
  Actual type: Int -> ST s0 Int

我认为,由于bar可以在其参数中接受任何 s,因此foo的结果( a 特别是s)应该没问题。

编辑: 忘了添加。这按预期工作:

quux :: Int -> Int
quux x = bar $ foo x

0 个答案:

没有答案