F# で Either もできたよー

ʕ•͡ω•ʔ 最近 fsharp-mode より tuareg-mode のがいいんじゃないかって思うようになってきた

module Data.Either

type either<'a, 'b> =
  | Left  of 'a
  | Right of 'b

let either f g e =
  match e with
    | Left  a    -> f a
    | Right b    -> g b

let isLeft x =
  match x with
  | Left _    -> true
  | Right _   -> false

let isRight x =
  match x with
  | Left _    -> false
  | Right _   -> true

let lefts es =
  Seq.filter isLeft es

let rights es =
  Seq.filter isRight es