[Haskell-cafe] [ZipList Monad] Final answer?
enakai at redhat.com
Fri Oct 18 00:55:54 UTC 2013
I found a few interesting discussions on how to construct ZipList Monad in the past (around 2009).
For example, http://www.haskell.org/pipermail/haskell-cafe/2009-April/059079.html
But there seems no final answer to it. After a good discussion with one of my Haskell friends, we finally came up with the following one:
newtype MyZipList a = MyZipList [a] deriving (Show)
getBase :: MyZipList a -> [a]
getBase (MyZipList xs) = xs
instance Monad MyZipList where
return x = MyZipList $ repeat x
m >>= f = MyZipList $ bind (getBase m) (fmap getBase f)
bind :: [a] -> (a -> [b]) -> [b]
bind  f = 
bind (x:xs) f = case f x of
 -> 
y:_ -> y : bind xs (fmap tailOrNil f)
tailOrNil :: [b] -> [b]
tailOrNil  = 
tailOrNil (x:xs) = xs
This is fairly simple and looks to work with variable length lists. Do you think this could be the final answer?
More information about the Haskell-Cafe