10 ms·
If zip is following the 'functional' definition, it should only return a list of the length of the shorter of the two inputs. In Haskell: zip :: [a] -> [b]
by AaronFriel 12y ago
If zip is following the 'functional' definition, it should only return a list of the length of the shorter of the two inputs. In Haskell:
zip :: [a] -> [b] -> [(a, b)]
Not:
zip :: [a] -> [b] -> [(Maybe a, Maybe b)]
If you want to allow processing a sequence of tails, you could have:
zipWithTail :: [a] -> [b] -> ([(a, b)], Either [a] [b])
Which would return a list of pairs and a list of either the tail of the first or the second input, whichever was longer.
- pcwalton 12y agoIt is following that definition, but the issue is that it's built on iterators, which are of unknown length. Haskell would have effectively the same checks if built on lists because of the way lazy thunks work.