我正在尝试初步了解完整的Elm应用程序的外观.特别是"堆栈"看起来像什么.举一个具体的例子,假设我有一个网站,允许用户注册/登录,然后上传图片和评论他人的图片和评论.它提供HTML,JavaScript和CSS,并在服务器上使用PHP和/或Perl,PHP/Perl与MySQL或Oracle交互.如果我要用Elm重新开发这个站点,Elm会处理哪些部分以及堆栈其余部分的常见/推荐选择是什么?
我的问题是haskell中的monad是否真的保持了hakell的纯度,如果是的话.我经常读到副作用是如何不纯的,但有用的程序(例如i/o)需要副作用.在下一句中,声明haskell的解决方案是monads.然后monad在某种程度上被解释,但实际上并不是他们如何解决副作用问题.
我已经看到了这个和这个,我对答案的解释实际上就是我自己读到的那个 - IO monad的"动作"不是i/o本身,而是执行时执行的对象/ O.但是我发现可以为任何代码或任何已编译的可执行文件创建相同的参数.难道你不能说C++程序只在编译代码执行时产生副作用吗?所有的C++都在IO monad中,所以C++是纯粹的?我怀疑这是真的,但我老实说不知道它不是以什么方式存在.事实上,Moggi(sp?)最初是否使用monads来模拟命令式程序的指称语义?
一些背景:我是haskell和函数式编程的粉丝,我希望随着我的学习继续学习更多.例如,我理解参考透明度的好处.这个问题的动机是我是一名研究生,我将为编程语言课提供2个1小时的演示文稿,其中一个特别涉及haskell,另一个涉及函数式编程.我怀疑大多数班级不熟悉函数式编程,可能已经看过一些方案.我希望能够(合理地)清楚地解释monad如何解决纯度问题而不进入类别理论和monad的理论基础,我没有时间去讨论,无论如何我不完全了解自己 - 当然还不够好.
我想知道在这种情况下"纯度"是不是真的很明确?
我正在通过Cormen et.Al.,Algorithms算法导论,第3版.,但我也对Haskell感兴趣.第8.2节(第194页)包括计数排序.我对如何在haskell中实现它和许多算法感兴趣,因为它们经常使用数组访问和破坏性更新.我看了一下RosettaCode的实现(下面复制了),我觉得很难遵循.
import Data.Array
countingSort :: (Ix n) => [n] -> n -> n -> [n]
countingSort l lo hi = concatMap (uncurry $ flip replicate) count
where count = assocs . accumArray (+) 0 (lo, hi) . map (\i -> (i, 1)) $ l
Run Code Online (Sandbox Code Playgroud)
我喜欢haskell的一个方面是算法如何非常清晰(例如Haskell quicksort示例),至少作为未经优化的规范.这似乎很不清楚,我想知道它是否必然如此或过度.
有人可以