几天后,我试图围绕Haskell中的函数式编程范例.我通过阅读教程和观看截屏视频来完成这项工作,但似乎没有什么能够坚持下去.现在,在学习各种命令式/ OO语言(如C,Java,PHP)时,练习对我来说是个好方法.但由于我不知道Haskell能够做什么,并且因为有许多新概念可供使用,我还不知道从哪里开始.
那么,你是如何学习Haskell的?是什么让你真正"打破僵局"?还有开始练习的好主意吗?
你如何在Applicative类型类中发音这些函数:
(<*>) :: f (a -> b) -> f a -> f b
(*>) :: f a -> f b -> f b
(<*) :: f a -> f b -> f a
Run Code Online (Sandbox Code Playgroud)
(也就是说,如果他们不是运营商,他们会被称为什么?)
作为旁注,如果你可以重命名pure
为对非数学家更友好的东西,你会怎么称呼它?
我是Haskell的新手.我正在学习单子.
data Container a = Container a deriving Show
x = Container 1 :: Container Int
plusOne :: Container Int -> Container Int
plusOne (Container x) = Container (x+1)
Run Code Online (Sandbox Code Playgroud)
有没有办法解除plusOne
申请Container (IO Int)
?
或者我应该定义一个新功能,例如:
plusOne' :: Container (IO Int) -> Container (IO Int)
plusOne' (Container x) = Container (liftM (+1) x)
Run Code Online (Sandbox Code Playgroud)
谢谢大家:-)然后有什么方法可以避免重新定义plusOne吗?
因为我构建程序,首先我用非monadic类型的容器构建程序(正常值如:Container Int ..etc),并且我测试具有指定值的函数(容器10 ..).
然后我尝试将这些程序应用于随机或生成的值.这是我用其他语言编程的基本方法(比如Lisp,Python ..)
所以当我想尝试将这些函数应用于monadic-value容器时,我不想重新定义函数.
这种方法不适用于Haskell编程?我应该改变我的思维模式吗?或者我误解了Haskell?