Skip to content
/ hs2lazy Public
forked from irori/hs2lazy

Haskell -> Lazy K translator.

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
License.thih
Notifications You must be signed in to change notification settings

helvm/hs2lazy

 
 

hs2lazy -- Haskell to Lazy K compiler

What is this?

This is a translator from a subset of Haskell to Lazy K.

How to compile

You can build hs2lazy with GHC by following command:

ghc -o hs2lazy --make Main.hs

How to use

hs2lazy [source files]

If multiple source files are given, they are concatenated in the order specified. Output Lazy K code is written to standard output. Prelude module is not automatically loaded. So, you may specify examples/hs2lazy-prelude.hs first, like following:

hs2lazy examples/hs2lazy-prelude.hs foo.hs >foo.lazy

How to write source code

In Lazy K, input and output streams are represented as infinite lists of numbers (256 represents EOF). Hs2lazy programs handle I/O in similar way.

In Haskell, type of main function is IO (). But in hs2lazy, that is:

main :: Stream -> Stream

The Stream type is defined in hs2lazy-prelude.hs as

data Stream = Stream Char Stream

The input is a infinite stream of characters. For example:

Stream 'f' $ Stream 'o' $ Stream 'o' $ Stream eof $ Stream eof ...

eof is defined as (chr 256).

Streams can be converted to/from strings by fromStream and toStream defined in hs2lazy-prelude.hs. For example, following program reverses the input character-by-character.

main = toStream . reverse . fromStream

Or simply,

main = interact reverse

interact converts a String-to-String function to a Stream-to-Stream function.

License

Type.hs is based on Typing Haskell in Haskell. See Lisence.thih for the license of it.

About

Haskell -> Lazy K translator.

Topics

Resources

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
License.thih

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages

  • Haskell 99.7%
  • Makefile 0.3%