Here is another approach to implement toList:
indexList p l = range (p, l - 1) ++ range (0, p - 1)
toList' (FLQ l p a) = map (a !) $ indexList p l
I'm not sure that it's much better though, but the idea can be used everywhere:
eq (FLQ l1 p1 a1) (FLQ l2 p2 a2) = l1 == l2 && comp where
r1 = indexList p1 l1
r2 = indexList p2 l2
comp = Prelude.all (\(i1, i2) -> (a1 ! i1) == (a2 ! i2)) $ zip r1 r2