Sommes compensées et en cascade

Voici le code à compléter pour la semaine 8 concernant les algorithmes de Kahan-Dekker et de Pichat :

Haskell
import qualified Data.List as L -- pour avoir reverse et sort
 
-- twoSum : somme compensée de 2 flottants sans branchement
twoSum x y =
  let s       = x + y            in
  let [xv,yv] = [s - y , s - x ] in
  let [ex,ey] = [x - xv, y - yv] in
  (s , ex + ey)
      
-- somme basique (+) des éléments d'une liste classée dans l'ordre croissant
sommeC liste =
 
-- somme basique (+) des éléments d'une liste classée dans l'ordre décroissant
sommeD liste =
 
-- somme compensée (Kahan) : on rajoute les raisins perdus après chaque cep secoué
sommeK liste = 
  let (sn,en) = foldl (\ (sk, ek) xk' -> twoSum sk (xk' + ek)) (0,0) liste in sn
 
-- somme en cascade (Pichat) : on collecte les raisins perdus à part et on les rajoute à la fin
sommeP liste =

courtesy of webmatter.de