Repeated thanks to you, Adam! Your code is brilliantly simple. Sadly, I cannot reproduce the behaviors in your comments on my ghci (7.6.1) ..... Can we guess why? The version of packages we are using?
Mines are here. https://github.com/nushio3/practice/tree/master/variable-arity/adam >>> :t forZ [1,2,3] (+) forZ [1,2,3] (+) :: (Num t, Num a, TypeCast br HFalse, HBuild2' br (HCons [t] HNil) (a -> a -> a) r) => r >>> forZ [1,2,3] [10] (+) <interactive>:13:1: Couldn't match type `[y]' with `(a0 -> a0 -> a0) -> t0' When using functional dependencies to combine Apply ApplyZap (a, b) [y], arising from the dependency `f a -> r' in the instance declaration at Part1.lhs:193:12 Apply ApplyZap ([[t2]], [t1]) ((a0 -> a0 -> a0) -> t0), arising from a use of `forZ' at <interactive>:13:1-4 In the expression: forZ [1, 2, 3] [10] (+) In an equation for `it': it = forZ [1, 2, 3] [10] (+) >>> forZ [1,2,3] "hi there" (,) <interactive>:14:1: Couldn't match type `[y]' with `(a0 -> b0 -> (a0, b0)) -> t0' When using functional dependencies to combine Apply ApplyZap (a, b) [y], arising from the dependency `f a -> r' in the instance declaration at Part1.lhs:193:12 Apply ApplyZap ([[Char]], [t1]) ((a0 -> b0 -> (a0, b0)) -> t0), arising from a use of `forZ' at <interactive>:14:1-4 In the expression: forZ [1, 2, 3] "hi there" (,) In an equation for `it': it = forZ [1, 2, 3] "hi there" (,) Best, Takayuki 2012/12/11 adam vogt <[email protected]>: > On Sat, Dec 8, 2012 at 10:27 AM, Takayuki Muranushi <[email protected]> > wrote: >> Continued discussion from >> >> https://groups.google.com/d/topic/haskell-cafe/-e-xaCEbd-w/discussion >> https://groups.google.com/d/topic/haskell-cafe/kM_-NvXAcx8/discussion >> >> Thank you for all the answeres and thinkings; >> >> >> Here's zipWithN for general Zip functors: [1] . This, together with >> [2] may constitute a small hackage. A modification from Wren's idea to >> [1] is the use of fmap instead of repeat. >> >> I'm wondering if there are any laws for Zip functors. I first thought >> that there are similarity between Zips and Applicatives, as [3] states >> >>> instance Applicative f => Zip f where >>> zip = liftA2 (,) >> >> However, my intuition is that zipping two arrays should result in an >> array of size of the same order as two, giving rise to a Zip functor >> law candidate: >> >> zipWith const xs $ zipWith const xs ys == zipWith const xs ys >> >> which is violated by the above statement "zip = liftA2 (,)" . >> >> >> >> >> [1] >> https://github.com/nushio3/practice/blob/master/variable-arity/ZipWithN-2.hs >> [2] https://github.com/nushio3/practice/blob/master/free-objects/zipf-12.hs >> [3] >> http://hackage.haskell.org/packages/archive/TypeCompose/0.9.7/doc/html/Data-Zip.html > > Hi again, Takayuki > > While the forZN in zipf-12 is able to infer the result type given > arguments, it doesn't give any useful information about types for > arguments unlike an example here: > > http://code.haskell.org/~aavogt/flip_zipWithN/P4.hs > > which imports a slight modification of Paczesiowa's code: > http://code.haskell.org/~aavogt/flip_zipWithN/Part1.lhs > > But maybe it isn't possible to infer much about earlier arguments > given later ones since there is an instance Zip ((->) a), that forZN > apparently can work with. > > Adam -- Takayuki MURANUSHI The Hakubi Center for Advanced Research, Kyoto University http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
