我正在尝试创建一个使用Haskell + Netwire 5 (+ SDL)的游戏。现在我正在进行输出部分的工作,在这里,我希望创建一些读取游戏状态的连线,并输出SDL表面,以便在屏幕上闪烁。但是,问题是SDL曲面包含在IO monad中,因此任何创建此类曲面的函数都必须具有a -> IO b类型。当然,arr不从a -> m b构造Wire。但是,由于电线的类型签名是(Monad m, Monoid e) => Wire s e m a b,它看起来很像Kleisi
从这个帖子可以看出:这是一个常见的问题,我已经尝试了大多数建议的教程(除了Brian Beck的视频,它不能在我的linux机器上播放):据我所知,monad由一个三元组组成:一个内部函数器和两个自然转换。因此,由于我们已经在上面定义了函子,因此自然变换的一般类型将是:((a -> b) -> (m a -> m b)) -> ((a -> b) -> (m a -> m b))
但我们使用的实际自然转
我试图理解Haskell列表理解是如何在模式匹配方面“在幕后”工作的。我知道List是一个monad,定义为(source from Real World Haskell,ch.14): return x = [x]xs >>= f = concat (map f xs) fail _ = []
因此,列表理解基本上为列表理解中选择的
A -> B分解为A => (T B)
现在,Haskell支持monad,包括一个IO monad,它在ML中显示出足够的效果,并且它有一个包含=> (但也包括部分函数)的函数空间。因此,我们应该能够通过这种分解将大量的ML片段转化为Haskell。理论上我认为这是可行的。我的问题是这样的嵌入是否可行:是否有可能设计一个Haskell库,允许在离ML不远的地方使用Haskell进行编程?如果是的话,表演会如何?我的