1

我正在阅读来自 archive.org 的Template Haskell 教程,因为它从 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上的内容是什么?

4

2 回答 2

1

快速搜索产生了由 Simon Peyton-Jones 本人撰写的题为“ Haskell 的模板元编程”的论文!

希望这可以帮助!

于 2011-04-22T18:33:53.620 回答
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

于 2013-05-27T05:40:18.223 回答