apfelmus wrote: > Jules Bean wrote: >> Have you tried using pattern guards for views? >> >> f s | y :< ys <- viewl s = .... >> | EmptyL <- viewl s = .... > > Hm, I'd simply use a plain old case-expression here > > f s = case viewl s of > y :< ys -> ... > EmptyL -> ... > > In other words, case-expressions are as powerful as any view pattern may > be in the single-parameter + no-nesting case. > > A better example is probably zip for sequences (Data.Sequence.Seq): > > zip :: Seq a -> Seq b -> Seq (a,b) > zip xs ys = case viewl xs of > x :< xt -> case viewl ys of > y :< yt -> (x,y) <| zip xt yt > EmptyL -> empty > EmptyL -> empty
This is how I do it, no pattern guards, no view patterns: zip :: Seq a -> Seq b -> Seq (a,b) zip xs ys = case (viewl xs,viewl ys) of (EmptyL, _ ) -> empty (_, EmptyL ) -> empty (x :< xt, y :< yt) -> (x,y) <| zip xt yt This is IMHO a lot clearer than any of the alternatives you listed, except your 'dream' (which is exactly what 'real' views would give us). Cheers Ben, member of the we-want-real-views-or-nothing-at-all movement ;-) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe