I also do not like the way it uses = in more than one way:
1) As to assign values.
2) To define functions.
3) as an relational operator to test equality.
so you can have function definitions like
mktree list = build (sort list) where
build lst = Empty, if lst = 
= Fork left (lst!m) right, otherwise
left = build (take m lst)
right = build (drop (m+1) lst)
m = #lst div 2
which shows = being used to define functions, mktree list = build .. and build lst = , and then as a equality operator lst = , and then to assign to left, right and m, this is ugly and ambiguous.