Skip to content

Instantly share code, notes, and snippets.

@tlunter
Created June 5, 2013 20:45
Show Gist options
  • Save tlunter/5717172 to your computer and use it in GitHub Desktop.
Save tlunter/5717172 to your computer and use it in GitHub Desktop.
Double compare?
data TTT a = Empty | Two (TTT a) a (TTT a) | Three (TTT a) a (TTT a) a (TTT a)
type Set a = TTT a
empty :: Set a
empty = Empty
member :: Ord a => a -> Set a -> Bool
member x Empty = False
member x (Two l v r) =
case compare x v of
LT -> member x l
EQ -> True
GT -> member x r
member x (Three l lv m rv r) =
case compare x lv of
LT -> member x l
EQ -> True
GT -> case compare x rv of
LT -> member x m
EQ -> True
GT -> member x r
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment