Steve Schafer wrote:
In my text/graphics formatting work, I find myself doing a lot of
"pipeline" processing, where a data structure will undergo a number of
step-by-step transformations from input to output. For example, I
have a function that looks like this (the names have been changed to
protect the innocent--and to focus on the structure):

 process :: a -> b -> c -> d -> e
 process x1 x2 x3 x4 =
   let y01       = f01 x1 x2 x3;
       y02       = f02 x1;
       y03       = f03 y02;
       y04       = f04 y03;
       y05       = f05 x1 y01 y04;
       y06       = f06 x2 y05;
       (y07,y08) = f07 y01 y06;
       y09       = f08 y07;
       (y10,y11) = f09 x2 x4 y09 y08;
       y12       = f10 y10;
       y13       = f11 y12;
       y14       = f12 x1 x2 x3 y01 y13;
       y15       = f13 y14;
       y16       = f14 y15 y11
       in y16

Disclaimer: just re-written by hand so needs double-checking before use:

   process x1 x2 x3 x4 =
       let
           y01 = f01 x1 x2 x3
           (y07, y08) = f07 y01 (f06 x2 (f05 x1 y01 (f04 (f03 y02))))
           (y10, y11) = f09 x2 x4 (f08 y07) y08
       in
           f14 (f13 (f12 x1 x2 x3 y01 (f11 (f10 y10)))) y11

You can also make it look more like the diagram by using more indentation eg:

   process x1 x2 x3 x4 =
       let
           y01 =
               f01
                       x1
                       x2
                       x3
           (y07, y08) =
               f07
                       y01
                       (f06
                           x2
                           (f05
                                   x1
                                   y01
                                   (f04
                                       (f03
                                           y02))))
           ...

Best regards, Brian.
--
http://www.metamilk.com
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to