Last active
December 14, 2018 17:39
-
-
Save Yaneeve/8f105ac988f3d4a88f73b3eab54272cd to your computer and use it in GitHub Desktop.
Revisions
-
Yaneeve renamed this gist
Dec 14, 2018 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
Yaneeve created this gist
Dec 14, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,51 @@ //https://en.wikibooks.org/wiki/Haskell/Continuation_passing_style#Passing_continuations val add: Int => Int => Int = {x => { y => x + y}} //add(1)(2) //Function.uncurried(add)(1, 2) def addCps[R]: Int => Int => ((Int => R) => R) = {x => { y => def lambda[K]: (Int => K) => K = {k: (Int => K) => k(add(x)(y))} lambda }} val square: Int => Int = { x => x * x } //square(2) def squareCps[R]: Int => ((Int => R) => R) = { x => def lambda[K]: (Int => K) => K = { k: (Int => K) => k(square(x)) } lambda } val pythagoras: Int => Int => Int = {x => {y => add(square(x))(square(y))}} //pythagoras(2)(3) //Function.uncurried(pythagoras)(2, 3) def pythagorasCps[R]: Int => Int => ((Int => R) => R) = {x => {y => def lambda[K]: (Int => K) => K = {k: (Int => K) => val `x^2`: (Int => K) => K = squareCps[K](x) val `y^2`: (Int => K) => K = squareCps[K](y) `x^2`{xSquared => `y^2`{ySquared => addCps[K](xSquared)(ySquared)(k) } } } lambda }} val sCps: (Int => Unit) => Unit = squareCps[Unit](2) sCps({a => println(a)}) val aCps: (Int => Unit) => Unit = addCps[Unit](1)(2) aCps({a => val b = a*13 println(b) }) val pCsp: (Int => Unit) => Unit = pythagorasCps[Unit](3)(4) pCsp(println) // https://scastie.scala-lang.org/Yaneeve/BVYFqjG0SsG4kDcdx7i5uQ