Prevod funkcie do pointfree podoby (Haskell)

Prevod funkcie do pointfree podoby (Haskell)
« kdy: 18. 01. 2021, 15:12:33 »
Ahojte,
mam následovnú funkciu v Haskelli:
Kód: [Vybrat]
import qualified Data.List as L

addPositionsToSymbols :: String -> [(Char, (Integer, Integer))]
addPositionsToSymbols [] = []
addPositionsToSymbols (c:s)= L.foldl incr [(c, (0, 0))] s
                where incr acc e = let pos = snd $ head acc in (e, (incrX pos , incrY pos e)) : acc
                      incrX pos = fst pos + 1
                      incrY pos e = if e == '\n' then snd pos + 1 else snd pos
Jej účelom je namapovať na String "pozíciu" daného Charu v 2D s tým, že newline je ako keby posun o jednu pozíciu na y-ose. Môj dotaz je však na to, či je možné túto fciu prepísať do pointfree podoby a ak áno tak ako? Ona síce robí to čo chcem, ale je "neestetická"  :) a rád by som sa dozvedel nejaký viac-menej automatizovaný postup ako prevádzať fcie do pointfree, čím začať, nejakú stratégiu, či je možné všetky fcie previesť do pfree podoby alebo nie (a prečo je to tak). Uvítam akékoľvek rady Haskell entuziastov.