The first step in seeing into a point-free definition of a function is to revert the η-reduction:
dlToList = ($[]) . unDL
dlToList dl = (($[]) . unDL) dl
Then you start applying to the composition-chain, right-to-left:
dlToList dl = ($[]) (unDL dl)
You could then unpack the operator section†
dlToList dl = unDL dl $ []
However, keeping the ($[])
as it is actually makes sense, because this is the essential converter between difference lists and ordinary lists: it takes a [a]->[a]
-prepender-function and applies it to the terminator []
, resulting in a concrete list.
†
We could simplify that further:
dlToList dl = unDL dl []
which, incidentally, could be made point-free again in a shorter manner:
dlToList = (`unDL`[])