gpt4 book ai didi

haskell - 高阶函数和 ST

转载 作者:行者123 更新时间:2023-12-02 10:43:59 28 4
gpt4 key购买 nike

我正在玩http://hackage.haskell.org/packages/archive/vault/0.2.0.0/doc/html/Data-Vault-ST.html并想要编写如下所示的函数:

onVault  f = runST (f <$> Vault.newKey)
onVault2 f = runST (f <$> Vault.newKey <*> Vault.newKey)

等等。如果我用不带参数的函数替换这些函数并调用特定函数而不是 f,它会起作用,但这些高阶函数不会进行类型检查。

发生了什么事,我可以解决它吗?

最佳答案

您需要提供onVaultonVault2rank 2 types .

{-# LANGUAGE Rank2Types #-} -- RankNTypes would also work

onVault :: (forall s. Key s a -> b) -> b
onVault2 :: (forall s. Key s a -> Key s b -> c) -> c

这是因为runST::(forall s.ST s a) -> a要求传递的action在状态线程参数s中是多态的,它是一个用于保证纯度的类型级技巧。请参阅the ST monad article on HaskellWiki了解详情。

关于haskell - 高阶函数和 ST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433667/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com