Rust没有更高种类的类型。例如,函子(以及因此的monad)不能用Rust编写。我想知道是否有深层原因对此进行解释以及原因。
例如,我能理解的原因可能是没有零成本的抽象使HKT成为可能。否则类型推论要困难得多。当然,我也正在寻找一种解释,向我说明为什么这是真正的限制。
如果答案已经在其他地方了,您可以给我链接吗?
我不明白为什么这个程序不可打字:
type Test a = forall z. (a -> z) -> z
cons :: a -> Test a
cons = \a -> \p -> p a
type Identity = forall x. x -> x
t :: Identity
t = \x -> x
c :: Test Identity
c = cons (t :: Identity)
main :: IO ()
main = do{
print "test"
}
Run Code Online (Sandbox Code Playgroud)
我使用-XRankNTypesGHC 选项.
我有以下错误:
Couldn't match type `x0 -> x0' with `forall x. x -> x'
Expected …Run Code Online (Sandbox Code Playgroud) 我想将字节的无限流解析为Haskell数据的无限流。每个字节都是从网络读取的,因此将它们包装到IO monad中。
更具体地说,我有一个无限的type流[IO(ByteString)]。另一方面,我有一个纯解析函数parse :: [ByteString] -> [Object](ObjectHaskell数据类型在哪里)
有没有办法将我的无限monad流插入解析函数中?
例如,是否可以编写类型的函数[IO(ByteString)] -> IO [ByteString]以便我parse在monad中使用我的函数?