Skip to content

Instantly share code, notes, and snippets.

@aamedina
Created June 1, 2014 02:02
Show Gist options
  • Select an option

  • Save aamedina/4e114a305afa3e67fa98 to your computer and use it in GitHub Desktop.

Select an option

Save aamedina/4e114a305afa3e67fa98 to your computer and use it in GitHub Desktop.
-- the power of type inference and functional programming!
car (a, b) = a -- inferred type is car :: (t, t1) -> t
cdr (a, b) = b -- ... cdr :: (t, t1) -> t1
caar = car . car -- caar :: ((c, t), t1) -> c
cadr = car . cdr
cdar = cdr . car
cddr = cdr . cdr
caaar = car . caar
caadr = car . cadr -- inferred type is caadr :: (t2, ((c, t), t1)) -> c
cadar = car . cdar
caddr = car . cddr
cdaar = cdr . caar
cdadr = cdr . cadr
cddar = cdr . cdar
cdddr = cdr . cddr
caaaar = car . caaar
caaadr = car . caadr
caadar = car . cadar
caaddr = car . caddr -- inferred type is caaddr :: (t3, (t2, ((c, t), t1))) -> c
cadaar = car . cdaar
cadadr = car . cdadr
caddar = car . cddar
cadddr = car . cdddr
cdaaar = cdr . caaar
cdaadr = cdr . caadr
cdadar = cdr . cadar -- inferred type is cdaddr :: (t3, (t2, ((t, c), t1))) -> c
cdaddr = cdr . caddr
cddaar = cdr . cdaar
cddadr = cdr . cdadr
cdddar = cdr . cddar
cddddr = cdr . cdddr
-- the same holds true for all of these, I just typed a select few of them for example
-- fun fact: you can use GHCi (the GHC interpreter) to type expressions interactively in the REPL
-- just prepend the GHCi command :t to any expression
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment