import Control.Arrow cross ((ax, ay), (bx, by), (cx, cy)) = (bx - ax) * (cy - ay) - (cx - ax) * (by - ay) groupInPairs (a:b:xs) = scanl (curry $ first snd) (a, b) xs triangulate = uncurry (map . (uncurry . (,,))) . (head &&& groupInPairs . tail) task = (/ 2) . sum . map (abs . cross) . triangulate main = print $ task [(0, 0), (0, 1), (1, 1), (1, 0), (0.5, -1)]