Skip to content

Instantly share code, notes, and snippets.

@mgyongyosi
Created April 1, 2018 21:56
Show Gist options
  • Save mgyongyosi/6c736b9087d7231e8c652fe479d7b18e to your computer and use it in GitHub Desktop.
Save mgyongyosi/6c736b9087d7231e8c652fe479d7b18e to your computer and use it in GitHub Desktop.
List.pairwise in Elm
module Common.List exposing (pairwise)
import List exposing (drop, head, length, take)
import List.Extra exposing (zip)
import Maybe.Extra exposing (toList)
pairwise : List a -> List ( a, a )
pairwise lst =
let
grp =
take 2 lst
tup =
zip (take 1 grp) (drop 1 grp)
|> head
|> toList
remaining =
drop 1 lst
in
if 2 == length grp then
List.append tup (pairwise remaining)
else
[]
@pwadsworth
Copy link

pwadsworth commented Mar 18, 2019

This should be equivalent:

import List.Extra

pairwise : List a -> List ( a, a )
pairwise lst =
  lst  |> List.Extra.groupsOf 2 
        |> case l of 
              a :: b :: _ -> (a,b)
               _ -> (0,0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment