答案 0 :(得分:2)
你肯定想看一下 Haskell 编程语言。
Haskell是非常声明性的,懒惰评估是内置的,甚至存在功能性反应式编程库。但最值得注意的是,Haskell是纯粹的功能,即一切都是纯。
所以问题是Haskell如何处理任何IO产生的必要杂质。
答案非常适合你提出的想法。 Haskell使用一个名为 monads 的数学结构,它基本上代表一个计算产生一些值以及函数bind
(>>=
作为中缀运算符),它对这样的计算进行排序。
让我们看一些IO示例:读取一行并输出你的名字......即使IO是纯粹的,所以你不能简单地运行一些东西。相反,您构建了更大的IO计算
do
putStr "Enter your name: "
name <- getLine
putStrLn ("Hello " ++ name)
看起来非常迫切,但在幕后,它只是
的语法(putStr "Enter your name: ") >>
(getLine >>= \name ->
putStrLn ("Hello " ++ name))
现在,您可以以任何您喜欢的方式为任意种类的计算定义此bind
/ >>=
。事实上,你所谈论的一切都可以用这种方式实现 - 甚至是FRP。
尝试在Stackoverflow上寻找monad或Haskell;这个话题有很多问题。 毕竟,它仍然是所有类型检查的,因此编译器可以强制执行。