summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2015-03-25 21:39:46 +0800
committerJoe Zhao <ztuowen@gmail.com>2015-03-25 21:39:46 +0800
commit934eda548d1f0260db095f2739b2211bd5157324 (patch)
tree81fb348fc12462e9ffeb2e35e0bd4657251f9d1d
parent1c35f8f304a349b7fa8c5eb6c6256d707f0987fd (diff)
downloadtypeclass-934eda548d1f0260db095f2739b2211bd5157324.tar.gz
typeclass-934eda548d1f0260db095f2739b2211bd5157324.tar.bz2
typeclass-934eda548d1f0260db095f2739b2211bd5157324.zip
applicative h1
-rw-r--r--applicative/h1.txt32
1 files changed, 32 insertions, 0 deletions
diff --git a/applicative/h1.txt b/applicative/h1.txt
new file mode 100644
index 0000000..42d2c0e
--- /dev/null
+++ b/applicative/h1.txt
@@ -0,0 +1,32 @@
+Prove: pure f <*> x = pure (flip ($)) <*> x <*> pure f
+
+$ : (a -> b) -> a -> b
+flip : (a -> b -> c) -> b -> a -> c
+flip ($) : a -> (a -> b) -> b
+
+(.) : (b -> c) -> (a -> b) -> a -> c
+(. (flip ($))) (((a->b)->b) -> c) -> a -> c
+
+f : x -> y
+$ f : ((x -> y) -> b) -> b
+
+(($ f). (flip ($))) x -> y
+
+idea: Any expression built from the Applicative combinators can be transformed to a canonical form
+
+pure (flip ($)) <*> x <*> pure f
+= pure ($ f) <*> (pure (flip ($)) <*> x)
+= pure (.) <*> pure ($ f) <*> pure (flip ($)) <*> x
+= pure (($ f).(flip ($))) <*> x
+= pure f <*> x
+
+$ : f -> v -> f(v)
+flip ($) : v -> f -> f(v)
+
+($ f).(flip ($))
+=>
+(f' -> f'(f)) . (v -> f'' -> f''(v))
+=>
+(v -> f'(f)) where f' = f'' -> f''(v)
+=> v -> f(v)
+=> f