Now have slicing working over matches:
consider:
h :: Int -> (Int, Int)
h y = result 2
where
bob = 42
result x = res 3
res k = (23,24)
bill = 24
h x = (x, x+1)
this creates:
h1 y = result 2
where
res k = 23
result x = res 3
h1 x = x
h2 y = result 2
where
res k = 24
result x = res 3
h2 x = x + 1
Of course the question now is what does the slicer do for recursive definitions? such as splitAt?
Also the pretty printer has gon e abit dodgy in the at does not preserve the declaration order of the new matches... but this seems to type check.