packages feed

purescript-0.15.15: tests/purs/passing/TailCall.purs

module Main where

import Prelude
import Effect.Console (log, logShow)

data L a = C a (L a) | N

test :: Number -> L Number -> Number
test n N = n
test n (C x xs) = test (n + x) xs

loop :: forall a. Number -> a
loop x = loop (x + 1.0)

notATailCall = \x ->
  (\notATailCall -> notATailCall x) (\x -> x)

main = do
  logShow (test 0.0 (1.0 `C` (2.0 `C` (3.0 `C` N))))
  log "Done"