
Hi there, I am writing a toy compiler in Haskell to further my skills in functional programming. One of the functions I wrote is to determine the iteration count of a loop. I have a number of different test that I want to do and I find myself now testing some of these using pattern matching and some properties using an if-then-else construction. I do not consider this very pretty. My question is: are there guidelines of when to use pattern matching and when to use if-then-else? Snippet of the function I mentioned: ---8<----------------------------------------------------------------------------------- itercount (ForLoop [ ( Assignment update_lcv (Op2 "+" (Content update_lcv') update_expr) ) ] [(Assignment init_lcv init_expr)] (TestStmt (Op2 "<" (Content test_lcv) test_expr)) bodyblock) = if -- All stmts use the same lcv test_lcv == init_lcv && test_lcv == update_lcv && test_lcv == update_lcv' -- And the lcv is not updated in the body && intersect [test_lcv] (blockkills bodyblock) == [] then Just $ simple_itercount init_expr test_expr update_expr else Nothing itercount _ = Nothing ---8<----------------------------------------------------------------------------------- Thanks, Maarten