Skip to content

Instantly share code, notes, and snippets.

@Yaneeve
Last active December 14, 2018 17:39
Show Gist options
  • Select an option

  • Save Yaneeve/8f105ac988f3d4a88f73b3eab54272cd to your computer and use it in GitHub Desktop.

Select an option

Save Yaneeve/8f105ac988f3d4a88f73b3eab54272cd to your computer and use it in GitHub Desktop.

Revisions

  1. Yaneeve renamed this gist Dec 14, 2018. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. Yaneeve created this gist Dec 14, 2018.
    51 changes: 51 additions & 0 deletions cps_without_dollar_op
    Original 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