jaskell
Version 0.1.0.0 revision 0 uploaded by OwenBechtel.
Package meta
- Synopsis
- Stack-based concatenative language embedded in Haskell
- Description
Jaskell is a stack-based programming language implemented using normal Haskell types and functions, along with a quasiquoter that allows for a more elegant syntax than what pure Haskell supports. Since it is embedded in Haskell, Jaskell is purely functional and, unlike other stack-based languages, statically typed. The standard library is based on that of Joy, and the name "Jaskell" is a portmanteau of "Joy" and "Haskell."
A Jaskell program is a sequence of commands. Each command is a function which takes a stack — represented in Haskell as a left-nested tuple — and returns another stack. In order to accomodate side effects, commands need not actually be functions; any arrow is allowed as a command. The two most useful arrow types are
(->)
andKleisli IO
.Two example programs are shown below. The first program asks for the user's name and then prints a greeting. The second program defines a
qsort
function and then uses it to sort a list.{-# LANGUAGE QuasiQuotes #-} import qualified Jaskell import Jaskell.Quote (jsl) import Jaskell.Prelude main :: IO () main = Jaskell.runK [jsl| "What's your name?" !putStrLn [ "Hello, ", ?getLine, "!" ] $concat !putStrLn |] sorted :: ((), [Int]) sorted = Jaskell.run [jsl| DEF small = { $null } { uncons $null } disjoin ; DEF qsort = small { } { uncons { < } split rolldown } { swap cons ++ } binrec' ; [3,5,1,6,4,2] qsort |]
- Author
- Owen Bechtel
- Bug reports
- https://github.com/UnaryPlus/jaskell/issues
- Category
- Language
- Copyright
- n/a
- Homepage
- https://github.com/UnaryPlus/jaskell
- Maintainer
- ombspring@gmail.com
- Package URL
- n/a
- Stability
- n/a