Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

irori/hs2lazy

Open more actions menu

Repository files navigation

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.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.