MyNixOS website logo
Description

Stack-based concatenative language embedded in Haskell.

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 (->) and Kleisli 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
  |]

Jaskell

A stack-based concatenative language embedded in Haskell.

Documentation is available on Hackage.

Metadata

Version

0.1.0.0

License

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows