Skip to content

Undefined variable in compiled code #37

@Renegatto

Description

@Renegatto

A compilation in some cases may produce invalid lua that is fails at runtime.
I have not figured out what exactly causes this behavior but succeeded to catch some example.

Example

I tried my best to minimize it but can't find a way to make it smaller.

module Example (baz) where

import Effect (Effect)
import Prelude (class Monad, Unit, bind, discard, pure, unit)

baz  Effect Unit
baz = bar (pure unit)

bar   f. Monad f  f Unit  f Unit
bar f = do
  f
  _ ← pure [ foo f ]
  pure unit

foo   f. Monad f  f Unit  f Unit
foo fn1 = do
  _ ← fn1
  fn1
  fn1
  fn1

Run via:

pslua --foreign-path . --ps-output output--lua-output-file out.lua --entry Example

Generated code

...
return {
  baz = (function()
    return function(f)
      local Bind1 = M.Effect_monadEffect.Bind1()
      local pure = M.Control_Applicative_pure(M.Effect_monadEffect.Applicative0())
      return M.Example_discard(Bind1)(f)(function()
        return M.Control_Bind_bind(Bind1)(pure({
          [1] = (function()
            return function(fn1)
              local discard1 = M.Example_discard(Bind11) -- Bind11 is not in scope
              return M.Control_Bind_bind(M.Effect_monadEffect.Bind1())(fn1)(function(  )
                return discard1(fn1)(function()
                  return discard1(fn1)(function() return fn1 end)
                end)
              end)
            end
          end)()(f)
        }))(function() return pure(M.Data_Unit_foreign.unit) end)
      end)
    end
  end)()(M.Control_Applicative_pure(M.Effect_applicativeEffect)(M.Data_Unit_foreign.unit))
}

Version

pslua: 684b8d2c32524394c51577636a258e71d00cfefb (actual master)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions