我一直在阅读很多关于保证分布式系统中节点之间一致性的不同策略,但是我在确定何时使用哪种算法时遇到了一些麻烦.
使用什么样的系统我会使用像矢量时钟这样的东西?哪个系统适合使用像Paxos这样的东西?两者是相互排斥的吗?
我试图把我的头包裹在Monads周围,并且觉得如果我能解释为什么这不能编译,我会有更好的理解.
module Main where
import Data.Maybe
import System.Environment
myFunc :: String-> Maybe String
myFunc x = Just x
main :: IO ()
main = myFunc "yo" >>= putStrLn
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
blah.hs:9:10:
Couldn't match type `Maybe' with `IO'
Expected type: IO String
Actual type: Maybe String
In the return type of a call of `myFunc'
In the first argument of `(>>=)', namely `myFunc "yo"'
In the expression: myFunc "yo" >>= putStrLn
Run Code Online (Sandbox Code Playgroud)
我意识到问题在于我正在尝试将a Maybe与a匹配IO,但我并不完全确定如何将我的Maybe'd变量转换为IO.任何帮助将不胜感激!
我是Erlang的新手,我一直在阅读一些声称原子不是垃圾收集的文档.这一切都很好,但随后又提出了一个更大的问题:将它们用作模式匹配的"元组标签"是一个好主意吗?如果我有一个使用相对较多的Erlang应用程序,以及这样的函数:
-module(geometry).
-export([area/1]).
area({rectangle, Width, Ht}) -> Width * Ht;
area({square, X}) -> X * X;
area({circle, R}) -> 3.14159 * R * R.
Run Code Online (Sandbox Code Playgroud)
这可能会导致我的VM崩溃吗?如果该area函数运行了三百万次,那么因为矩形,正方形和圆形是原子而不会使我的Erlang VM崩溃吗?