在沉思些什么有用的标准类建议to this one class Coordinate c where
createCoordinate :: x -> y -> c x y
getFirst :: c x y -> x
getSecond :: c x y -> y
addCoordinates :: (Num x, Num y) => c x y -> c
我已经使用Store comonad编写了Conway's Game of Life的简单实现(请参阅下面的代码)。我的问题是,从第五次迭代开始,网格生成速度明显变慢。我的问题与我使用Store comonad的事实有关吗?还是我犯了一个明显的错误?据我所知,基于Zipper comonad的otherimplementations是高效的。 import Control.Comonad
da
我过去几周一直在向一个将单子(主要是从mtl)转移到箭头的图书馆捐款。 下面是与StateT单子一个简单的例子,从mtl: newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
-- arrowization -->
newtype StateTA s a b c = StateTA { runStateTA :: a (b,
为什么当你定义函数复制 duplicate :: w a -> w (w a)
的Comonad类型类(link),你必须修改“的背景下,”所有元素(即更改除当前其他元素值的上下文)。为什么不只是使用类似的东西在Monad中返回? 例(拉链): data Z a = Z [a] a [a]
,为什么我就不能定义重复的 duplicate z = Z [] z []
我试图得到要求
我们可以将monad描述为计算上下文,monad实现完全保留该上下文的含义。 例如Option - 上下文的含义是值可能存在。 考虑到Option数据类型,唯一有意义的实现是pure = some, flatMap f = {none => none; some x => f x } 正如我对monad的理解一样,通过遵循类型签名 - 对于任何monad,只有一个合理的实现。换句话说,如果您想为值
在我的应用程序中,我试图实现一个动画系统。在这个系统中,动画被表示为帧的循环列表: data CyclicList a = CL a [a]
我们可以(低效率)推进动画如下: advance :: CyclicList a -> CyclicList a
advance (CL x []) = CL x []
advance (CL x (z:zs)) = CL z (zs ++ [x])