Tag: fam proposal

为什么应用程序是Monad的超类?

鉴于: Applicative m, Monad m => mf :: m (a -> b), ma :: ma 这似乎被认为是一个法律: mf <*> ma === do { f <- mf; a <- ma; return (fa) } 或者更简洁: (<*>) === ap Control.Applicative的文档说<*>是“顺序应用程序”,这表明(<*>) = ap 。 这意味着, <*>必须按顺序从左到右评估效果,与>>= …保持一致。但这种感觉是错误的。 McBride和Paterson的原始文件似乎意味着从左到右的sorting是任意的: IO monad,实际上任何Monad都可以通过使用pure = return和<*> = ap 。 我们也可以用相反顺序执行计算的ap的变体 ,但是在本文中我们应该保持从左到右的顺序。 所以有两个合法的,不重要的派生出现在<*> >>=和return ,具有不同的行为。 […]