Skip to content

Instantly share code, notes, and snippets.

@hanshoglund
Last active June 2, 2018 01:06
Show Gist options
  • Save hanshoglund/3e1485320b7f46cc13f378a951cc0431 to your computer and use it in GitHub Desktop.
Save hanshoglund/3e1485320b7f46cc13f378a951cc0431 to your computer and use it in GitHub Desktop.
Prelude> let k = const
Prelude> let f = flip
Prelude> k f k k k k f k k k k f k k k $ 2
?
---
Prelude> :t k
k :: a -> b -> a
Prelude> :t k k
k k :: b -> a -> b1 -> a
Prelude> :t k k k
k k k :: a -> b -> a
Prelude> :t k k k k
k k k k :: b -> a -> b1 -> a
Prelude> :t k k k k k
k k k k k :: a -> b -> a
Prelude> :t k k k k k k
k k k k k k :: b -> a -> b1 -> a
Prelude> :t k k k k k k k
k k k k k k k :: a -> b -> a
Prelude> :t k k k k k k k k
k k k k k k k k :: b -> a -> b1 -> a
Prelude> :t k k k k k k k k k
k k k k k k k k k :: a -> b -> a
Prelude> :t k k k k k k k k k k
k k k k k k k k k k :: b -> a -> b1 -> a
Prelude> :t k k k k k k k k k k k
k k k k k k k k k k k :: a -> b -> a
Prelude> :t k k k k k k k k k k k k
k k k k k k k k k k k k :: b -> a -> b1 -> a
Prelude>
Prelude>
Prelude> :t f
f :: (a -> b -> c) -> b -> a -> c
Prelude> :t f
f :: (a -> b -> c) -> b -> a -> c
Prelude> :t f f
f f :: b -> (a -> b -> c) -> a -> c
Prelude> :t f f f
f f f :: (a -> ((a1 -> b -> c1) -> b -> a1 -> c1) -> c) -> a -> c
Prelude> :t f f f f
f f f f :: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f
f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f
f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f f
f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f f f
f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f f f f
f f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f f f f f
f f f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f f f f f f
f f f f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t f f f f f f f f f f f f
f f f f f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude>
Prelude>
Prelude>
Prelude>
Prelude> :t k k f
k k f :: a -> b -> a
Prelude> :t k f
k f :: b -> (a -> b1 -> c) -> b1 -> a -> c
Prelude> :t k f k f
k f k f :: b -> (a -> b -> c) -> a -> c
Prelude> :t k f k f k f k f
k f k f k f k f :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f k f k f k f k
k f k f k f k f k :: b -> c -> c
Prelude> :t k f k f k f k f k f
k f k f k f k f k f :: c -> c
Prelude> :t k f k f k f k f k f k
k f k f k f k f k f k :: a -> b -> a
Prelude> :t k f k f k f k f k f k f
k f k f k f k f k f k f :: b -> (a -> b1 -> c) -> b1 -> a -> c
Prelude> :t k f k f k f k f k f k f k
k f k f k f k f k f k f k :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f k f k f k f k f k f k f
k f k f k f k f k f k f k f :: b -> (a -> b -> c) -> a -> c
Prelude>
Prelude>
Prelude>
Prelude> :t k f f
k f f :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f f k f f
k f f k f f :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f f k f f k f f
k f f k f f k f f :: (a -> b -> c) -> b -> a -> c
Prelude>
Prelude>
Prelude> :t f k f
f k f :: c -> c
Prelude> :t f k f f k f
f k f f k f :: c -> c
Prelude>
Prelude> :t f k f f k f f k f
f k f f k f f k f :: c -> c
Prelude>
Prelude>
Prelude>
Prelude> :t f f k
f f k :: (a -> (a1 -> b -> a1) -> c) -> a -> c
Prelude> :t f f k f f k
f f k f f k :: c -> c
Prelude> :t f f k f f k f f k
f f k f f k f f k :: (a -> (a1 -> b -> a1) -> c) -> a -> c
Prelude>
Prelude>
Prelude>
Prelude> :t f f f k f k f f f f k f f f f f
f f f k f k f f f f k f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude>
Prelude>
Prelude> :t f f f k f k f f f f k f f f f f k f f f f f f f f f k
f f f k f k f f f f k f f f f f k f f f f f f f f f k :: c -> c
Prelude> :t f f f k f k f f f f k f f f f f k f f f f f f f f f k
f f f k f k f f f f k f f f f f k f f f f f f f f f k :: c -> c
Prelude> :t f f f k f k f f f f k f f f f f k f f f f f f f f f k f
f f f k f k f f f f k f f f f f k f f f f f f f f f k f
:: (a -> b -> c) -> b -> a -> c
Prelude>
Prelude> :t f f f k f k f f f f k f f f f f k f f f f f f f f f k
f f f k f k f f f f k f f f f f k f f f f f f f f f k :: c -> c
Prelude>
Prelude> :t (f f f k f k f f f f k f f f f f k f f f f f f f f f k) 2
(f f f k f k f f f f k f f f f f k f f f f f f f f f k) 2
:: Num c => c
Prelude> (f f f k f k f f f f k f f f f f k f f f f f f f f f k) 2
^C
^C
d
^D
Interrupted.
Prelude>
Prelude> d
<interactive>:104:1: Not in scope: ‘d’
Prelude>
Leaving GHCi.
^C
Hanss-MacBook:PPZ Hoglund$
Hanss-MacBook:PPZ Hoglund$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelude> :t k f
<interactive>:1:1: Not in scope: ‘k’
<interactive>:1:3: Not in scope: ‘f’
Prelude> let k = const
Prelude> let f = flip
Prelude> :t k f
k f :: b -> (a -> b1 -> c) -> b1 -> a -> c
Prelude> :t k f f
k f f :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f k
k f k :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f k f
k f k f :: b -> (a -> b -> c) -> a -> c
Prelude> :t k f k k
k f k k :: b -> c -> c
Prelude> :t k f f f
k f f f :: b -> (a -> b -> c) -> a -> c
Prelude>
Prelude> :t k f f f f
k f f f f
:: (a -> ((a1 -> b -> c1) -> b -> a1 -> c1) -> c) -> a -> c
Prelude> :t k f f f f k
k f f f f k :: c -> c
Prelude> :t k f f f f f
k f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f f f f
k f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f f f f f
k f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f f f f f k
k f f f f f f f k :: c -> c
Prelude> :t k f f f f
k f f f f
:: (a -> ((a1 -> b -> c1) -> b -> a1 -> c1) -> c) -> a -> c
Prelude>
Prelude> :t k f f f f f f f f f f
k f f f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f f f f f f f f f f f f
k f f f f f f f f f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f k
k f f f k :: (a -> (a1 -> b -> a1) -> c) -> a -> c
Prelude> :t k f f f k f
k f f f k f :: (a1 -> (a -> b -> a) -> c) -> a1 -> c
Prelude> :t k f f f k f f
k f f f k f f :: (a1 -> (a -> b -> a) -> c) -> a1 -> c
Prelude> :t k f f f k f f k k
k f f f k f f k k :: a -> b -> a
Prelude> :t k f f f k f f k f
k f f f k f f k f :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f f f k f f k f f
k f f f k f f k f f :: b -> (a -> b -> c) -> a -> c
Prelude> :t k f f f k f f k f f f
k f f f k f f k f f f
:: (a -> ((a1 -> b -> c1) -> b -> a1 -> c1) -> c) -> a -> c
Prelude> :t k f f f k f f k f f f f
k f f f k f f k f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f k f f k f f f f f
k f f f k f f k f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f k f f k f f f f f k
k f f f k f f k f f f f f k :: c -> c
Prelude> :t k f f f k f f k f f f f f k f
k f f f k f f k f f f f f k f :: (a -> b -> c) -> b -> a -> c
Prelude> :t f k f f f k f f k f f f f f k
f k f f f k f f k f f f f f k :: c -> c
Prelude> :t k k f f f k f f k f f f f f k
k k f f f k f f k f f f f f k :: c -> c
Prelude> :t k f f f k f f k f f f f f k
k f f f k f f k f f f f f k :: c -> c
Prelude> :t k f f f k f f k f f f f f
k f f f k f f k f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f k f f k f f f f f f
k f f f k f f k f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f k f f k f f f f f k f
k f f f k f f k f f f f f k f :: (a -> b -> c) -> b -> a -> c
Prelude> :t k f f f k f f k f f f f f f
k f f f k f f k f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k f f f k f f k f f f f f f
k f f f k f f k f f f f f f
:: (a1 -> ((a -> b -> c) -> b -> a -> c) -> c1) -> a1 -> c1
Prelude> :t k k k k k f f k f k k k k k k f f k f k k k k k k k f f f f f k
k k k k k f f k f k k k k k k f f k f k k k k k k k f f f f f k
:: c -> c
----
k,f by themselves always typecheck, but seem to eventually repeat
add s and () for more fun
Spectacular type errors:
(k ((s k k s) s) k k s) (s k k) ((k s) k s) (k s) k
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment