Шаблон Haskell: zipn - PullRequest
       9

Шаблон Haskell: zipn

1 голос
/ 22 апреля 2011

Я читал Учебник по шаблону Haskell с archive.org, так как он был потерян с 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, что это такое?

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

В результате быстрого поиска была получена статья " Шаблон метапрограммирования для Haskell ", написанная самим Саймоном Пейтон-Джонсом!

Надеюсь, это поможет!

0 голосов
/ 27 мая 2013

Обратите внимание, что, насколько я могу судить, реализация 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 (фрагменты шаблона не поддерживаются)

Однако там вы можете найти реализацию zipWithN с использованием шаблона haskell:

http://www.haskell.org/haskellwiki/Template_Haskell#zipWithN

...