我正在阅读archive.org中的Template Haskell tutorial,因为它已经从haskell.org丢失了,并注意到它已损坏,就像随机部分被取出一样。
我希望了解他们对zipn的实现。他们唯一的代码是:
\ y1 y2 y3 >
case (y1,y2,y3) of
(x1:xs1,x2:xs2,x3:xs3) > (x1,x2,x3) : ff xs1 xs2 xs3
(_,_,_) > []
mkZip :: Int > Expr > Expr
mkZip n name = lam pYs (caseE (tup eYs) [m1,m2])
where
(pXs, eXs) = genPE "x" n
(pYs, eYs) = genPE "y" n
(pXSs,eXSs) = genPE "xs" n
pcons x xs = [p| $x : $xs |]
b = [| $(tup eXs) : $(apps(name : eXSs)) |]
m1 = simpleM (ptup (zipWith pcons pXs pXSs)) b
m2 = simpleM (ptup (copies n pwild)) (con "[]")
这对我没有意义。有没有人有一个很好的教程副本?或者是archive.org上的内容是什么?
答案 0 :(得分:1)
快速搜索本文由Simon Peyton-Jones自己撰写的题为“Template Meta-programming for Haskell”的文章!
希望这有帮助!
答案 1 :(得分:0)
请注意,据我所知,本文中发现的zipN的实现从未实际编译过GHC的已发布版本。我试图自己编译,我收到了这封电子邮件中描述的错误:
http://www.haskell.org/pipermail/template-haskell/2003-July/000126.html(未实现模式切片)。
这在2003年没有实现,但今天仍未实现:http://www.haskell.org/ghc/docs/7.6.1/html/users_guide/template-haskell.html(不支持模式切片)
但是你可以使用模板haskell找到zipWithN的实现:
http://www.haskell.org/haskellwiki/Template_Haskell#zipWithN