Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
The EDSL Provides bridge between IchigoJam BASIC and Haskell.
References for IchigoJam BASIC are available at http://ichigojam.net/IchigoJam-1.0.1.html.
For example, "Jumping rome girl Sacchan" http://pcn.club/ns/diprogram.en.html could be expressed like this.
sacchan = do label 10 $ y=:25 >> v=:99 >> x=:17 >> u=:5 >> s=:0 label 20 $ ifThen (v/=99) $ y=:y+v >> v=:v+1 label 30 $ ifThen (25<y) $ y=:25 >> v=:99 >> s=:s+1 label 40 $ x=:x+u label 50 $ ifThen (17<x) $ u=:u-1 label 60 $ ifThen (x<17) $ u=:u+1 label 70 $ k=:inkey label 80 $ ifThen (k==32) $ v=:(-3) label 90 $ cls label 100 $ locate 17 y >> print "@" label 110 $ locate x 25 >> print "-" label 120 $ locate 0 0 >> print ("SCORE:" ++ s) label 130 $ ifThen (pre(y==25)*pre(x==17)) end label 140 $ wait 2 label 150 $ goto 20
Get IchigoJam BASIC code like this.
showSacchan = putStr $ translate sacchan
Also, you can send the code to IchigoJam directly.
sendSacchan = do h <- IJ.opend "/dev/ttyUSB0" IJ.send h $ translate sacchan IJ.close h
To use this, your code should begin with this code block.
{-# LANGUAGE OverloadedStrings #-} import Prelude hiding (print,(++),(+),(-),(*),(/),(%),(==),(/=),(>=),(>),(<=),(<),(&&),(||),not,abs,return) import qualified Prelude as P import qualified IchigoJam as IJ import Language.Huckleberry.V10101
For more example. https://github.com/mitsuji/huckleberry
() is pre
.
Put line number by label
.
[n] is arr
.
LET is let'
.
= is =:
.
; is ++
.
IN is in'
.
& is .&.
.
| is .|.
.
^ is xor
.
>> is shiftR
.
<< is shiftL
.
~ is complement
.
- translate :: Code () -> String
- pre :: Expr Int16 -> Expr Int16
- label :: Int16 -> Code () -> Code ()
- ifThenElse :: Expr Int16 -> Code () -> Code () -> Code ()
- ifThen :: Expr Int16 -> Code () -> Code ()
- forStepNext :: Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16 -> Code () -> Code ()
- forNext :: Expr Int16 -> Expr Int16 -> Expr Int16 -> Code () -> Code ()
- a :: Expr Int16
- b :: Expr Int16
- c :: Expr Int16
- d :: Expr Int16
- e :: Expr Int16
- f :: Expr Int16
- g :: Expr Int16
- h :: Expr Int16
- i :: Expr Int16
- j :: Expr Int16
- k :: Expr Int16
- l :: Expr Int16
- m :: Expr Int16
- n :: Expr Int16
- o :: Expr Int16
- p :: Expr Int16
- q :: Expr Int16
- r :: Expr Int16
- s :: Expr Int16
- t :: Expr Int16
- u :: Expr Int16
- v :: Expr Int16
- w :: Expr Int16
- x :: Expr Int16
- y :: Expr Int16
- z :: Expr Int16
- arr :: Expr Int16 -> Expr Int16
- let' :: Expr Int16 -> [Expr Int16] -> Code ()
- (=:) :: Expr Int16 -> Expr Int16 -> Code ()
- print :: Show r => Expr r -> Code ()
- (++) :: (Show a, Show b, IsString c) => Expr a -> Expr b -> Expr c
- led :: Expr Int16 -> Code ()
- wait :: Expr Int16 -> Code ()
- run :: Code ()
- list :: Expr Int16 -> Expr Int16 -> Code ()
- list' :: Code ()
- goto :: Expr Int16 -> Code ()
- end :: Code ()
- btn :: Expr Int16 -> Expr Int16
- new :: Code ()
- locate :: Expr Int16 -> Expr Int16 -> Code ()
- cls :: Code ()
- rnd :: Expr Int16 -> Expr Int16
- save :: Expr Int16 -> Code ()
- save' :: Code ()
- load :: Expr Int16 -> Code ()
- load' :: Code ()
- files :: Expr Int16 -> Code ()
- beep :: Expr Int16 -> Expr Int16 -> Code ()
- beep' :: Code ()
- play :: String -> Code ()
- play' :: Code ()
- tempo :: Expr Int16 -> Code ()
- (+) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (-) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (*) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (/) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (%) :: Expr Int16 -> Expr Int16 -> Expr Int16
- input :: String -> Expr Int16 -> Code ()
- tick :: Expr Int16
- clt :: Code ()
- inkey :: Expr Int16
- chr :: Expr Int16 -> Expr String
- chr' :: [Expr Int16] -> Expr String
- asc :: String -> Expr Int16
- scroll :: Expr Int16 -> Code ()
- scr :: Expr Int16 -> Expr Int16 -> Expr Int16
- scr' :: Expr Int16
- vpeek :: Expr Int16 -> Expr Int16 -> Expr Int16
- vpeek' :: Expr Int16
- (==) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (/=) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (>=) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (>) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (<=) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (<) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (&&) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (||) :: Expr Int16 -> Expr Int16 -> Expr Int16
- not :: Expr Int16 -> Expr Int16
- clv :: Code ()
- clear :: Code ()
- clk :: Code ()
- abs :: Expr Int16 -> Expr Int16
- gosub :: Expr Int16 -> Code ()
- return :: Code ()
- sound :: Expr Int16
- free :: Expr Int16
- ver :: Expr Int16
- renum :: Expr Int16 -> Code ()
- renum' :: Code ()
- lrun :: Expr Int16 -> Code ()
- file :: Expr Int16
- sleep :: Code ()
- video :: Expr Int16 -> Code ()
- peek :: Expr Int16 -> Expr Int16
- poke :: Expr Int16 -> Expr Int16 -> Code ()
- clp :: Code ()
- help :: Code ()
- ana :: Expr Int16 -> Expr Int16
- out :: Expr Int16 -> Expr Int16 -> Code ()
- out' :: Expr Int16 -> Code ()
- in' :: Expr Int16 -> Expr Int16
- in'' :: Expr Int16
- hex :: Expr Int16 -> Expr Int16 -> Expr String
- hex' :: Expr Int16 -> Expr String
- bin :: Expr Int16 -> Expr Int16 -> Expr String
- bin' :: Expr Int16 -> Expr String
- (.&.) :: Expr Int16 -> Expr Int16 -> Expr Int16
- (.|.) :: Expr Int16 -> Expr Int16 -> Expr Int16
- xor :: Expr Int16 -> Expr Int16 -> Expr Int16
- shiftR :: Expr Int16 -> Expr Int16 -> Expr Int16
- shiftL :: Expr Int16 -> Expr Int16 -> Expr Int16
- complement :: Expr Int16 -> Expr Int16
- bps :: Expr Int16 -> Code ()
- i2cr :: Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16
- i2cw :: Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16
- usr :: Expr Int16 -> Expr Int16 -> Expr Int16
Documentation
pre :: Expr Int16 -> Expr Int16 Source
Bracket operator.
the expression
pre(y==25)*pre(x==17)
evaluated as this expression in IchigoJam BASIC.
(Y=25)*(X=17)
label :: Int16 -> Code () -> Code () Source
Line number statement.
this expression
label 40 $ x=:x+u
evaluated as this statement in IchigoJam BASIC.
40 X=X+U
ifThenElse :: Expr Int16 -> Code () -> Code () -> Code () Source
IF .. THEN .. ELSE .. statement.
forStepNext :: Expr Int16 -> Expr Int16 -> Expr Int16 -> Expr Int16 -> Code () -> Code () Source
FOR .. = .. TO .. STEP .. .. NEXT statement.
forNext :: Expr Int16 -> Expr Int16 -> Expr Int16 -> Code () -> Code () Source
FOR .. = .. TO .. .. NEXT statement.
arr :: Expr Int16 -> Expr Int16 Source
Array valiables expression.
This expression
arr 3
evaluated as this expression in IchigoJam BASIC.
[3]
Commands for beginners
let' :: Expr Int16 -> [Expr Int16] -> Code () Source
LET statement.
This expression
let' a [3]
evaluated as this statement in IchigoJam BASIC.
LET A,3
Also, this expression
let' (arr 3) [11,12,13]
evaluated as this statement in IchigoJam BASIC.
LET[3],11,12,13
(=:) :: Expr Int16 -> Expr Int16 -> Code () infix 2 Source
Assignment operator.(=)
This expression
x =: x+u
evaluated as this statement in IchigoJam BASIC.
X=X+U
(++) :: (Show a, Show b, IsString c) => Expr a -> Expr b -> Expr c infixl 2 Source
Concatation operator.(;)
Commands for experts
complement :: Expr Int16 -> Expr Int16 Source
Complement expression (~)