这篇文章是有文化的Haskell.只需输入像"pad.lhs"这样的文件ghci就能运行它.
> {-# LANGUAGE GADTs, Rank2Types #-}
> import Control.Monad
> import Control.Monad.ST
> import Data.STRef
Run Code Online (Sandbox Code Playgroud)
好的,所以我能够想出如何ST用纯代码表示monad.首先,我们从我们的引用类型开始.它的具体价值并不重要.最重要的是PT s a不应该与任何其他类型同构forall s.(特别是,它既不应该同形()也不应该同形Void.)
> newtype PTRef s a = Ref {unref :: s a} -- This is defined liked this to make `toST'` work. It may be given a different definition.
Run Code Online (Sandbox Code Playgroud)
那种为s是*->*,但现在不是真的很重要.对于我们所关心的一切,它可能是多面手的.
> data PT s a where
> MkRef :: a -> PT s …Run Code Online (Sandbox Code Playgroud) 由我们生成的程序的堆配置文件./program +RTS -hy -p由"ARR_WORDS"控制.它与我的程序中任何明显的东西都不对应; 它是某种GHC内部的吗?我应该如何看待它在配置文件中的主导外观?
我正在使用GHC 7.0.3.
Haskell或特定编译器是否具有类型级lambda(如果这甚至是一个术语)?
详细说,我说有一个参数化类型,Foo a b并希望Foo _ b成为一个实例,比如Functor.是否有任何机制可以让我做类似的事情
instance Functor (\a -> Foo a b) where
...
Run Code Online (Sandbox Code Playgroud)
?
请问哈斯克尔模式或一些替代包提供一个类似于美妙inferior-haskell-type 里面一个where条款?
例如,假设我有
foo = undefined where
bar = complicated
...
Run Code Online (Sandbox Code Playgroud)
能够将标记放置bar并检查其类型将是非常棒的.
我第一次在Haskell程序中遇到了无限循环.我已经将它缩小到一个非常具体的代码部分,但我似乎无法精确指出我有一个非终止递归定义的位置.我模糊地熟悉:跟踪和:GHCi中的历史,但问题是我的代码的某些分支涉及相当多的递归修改Data.Map.Map,因为地图x是通过基于值adjust的地图中x'的某些东西获得的在另一张地图上取决于x'.具体细节在这里并不重要,但正如你可能知道的那样,如果这是以交织在一起的递归方式发生的,那么我的通话历史会在地图lookups,adjustments和insert离子所涉及的所有各种比较中完全陷入困境.
任何人都可以推荐一种更有效的方法来定位无限循环?例如,它可以帮助将呼叫历史限制为来自单个源文件的调用.
我有一个"不必要"多态的代码库,因为几乎每个函数都以某种方式是多态的(为什么不是,什么时候可以?),但最终程序只使用少数具体类型的函数.我已经开始花费一些时间投入SPECIALIZE和INLINABLEpragma试图降低所有这些多态性的性能成本,但是随着我的代码的大小,它非常受欢迎.对于每个函数,有没有办法分析在运行时花费多少时间"完成多态性所需的事情"?
(注意:我已经问过这个问题而不知道这样的事情是否在技术上是可行的,或者"多态性需要的东西"是否足够明确).
向量版本0.8的更改日志列出了以下更改并带有警告:
盒装载体的Functor,Monad,Applicative,Alternative,Foldable和Traversable实例(警告:它们往往很慢并且只是为了完整性而提供).
有人可以解释为什么会这样吗?它只是类型类专业化的正常成本,还是更有趣的东西?
更新:看一些特定的实例,例如:
instance Foldable.Foldable Vector where
{-# INLINE foldr #-}
foldr = foldr
Run Code Online (Sandbox Code Playgroud)
并且类似地用于其他折叠.这是否意味着Vector一般情况下折叠很慢?如果没有,是什么让一个非专业的折叠足够慢以保证警告?
如果有人不知道:制图是一种地图类型,其中一些依赖于国家/地区的数字属性缩放相应的区域,以便该属性的密度(接近)恒定.一个例子是

来自worldmapper.org.在这个例子中,国家根据人口规模进行调整,导致人口密度接近恒定.
不用说,这真的很酷.有没有人知道用于绘制此类地图的基于Matplotlib的库?worldmapper.org中使用的方法在(1)中描述,所以如果还没有人实现这个,我会感到惊讶......
我也有兴趣听说其他的图纸库,即使它们不是为Matplotlib制作的.
(1)Michael T. Gastner和MEJ Newman,基于扩散的密度均衡图制作方法,Proc.纳特.科学院.科学.美国,101,7499-7504(2004).可在arXiv上购买.
haskell ×8
ghc ×4
performance ×2
cartogram ×1
cartography ×1
debugging ×1
emacs ×1
ghci ×1
gpgpu ×1
integer ×1
lambda ×1
matplotlib ×1
monads ×1
optimization ×1
polymorphism ×1
profiling ×1
state ×1