Language.BASIC
Description
A simplified embedded version of original BASIC. Some things work, some things just give utterly mysterious type errors.
Beware, this is just a fun weekend hack.
- getBASIC :: BASIC -> [Expr ()]
- type BASIC = Expr ()
- data PRINT = PRINT
- data END
- data LET = LET
- data GOTO
- data IF = IF
- data THEN = THEN
- data INPUT = INPUT
- data FOR = FOR
- data TO = TO
- data NEXT = NEXT
- data STEP = STEP
- data Expr a = (Expr a) := (Expr a)
- (<>) :: Expr a -> Expr a -> Expr a
- (==) :: Expr a -> Expr a -> Expr a
- (<) :: Expr a -> Expr a -> Expr a
- (>) :: Expr a -> Expr a -> Expr a
- (<=) :: Expr a -> Expr a -> Expr a
- (>=) :: Expr a -> Expr a -> Expr a
- (^) :: Expr a -> Expr a -> Expr a
- data Expr a
- = Cmd Integer Command [Expr a]
- | Str String
- | Dbl Double
- | Label Integer
- | Binop (Expr a) String (Expr a)
- | (Expr a) := (Expr a)
- | SIN (Expr a)
- | COS (Expr a)
- | TAN (Expr a)
- | ATN (Expr a)
- | EXP (Expr a)
- | LOG (Expr a)
- | RND (Expr a)
- | INT (Expr a)
- | SGN (Expr a)
- | ABS (Expr a)
- | SQR (Expr a)
- | Var
- | A
- | B
- | C
- | D
- | E
- | F
- | G
- | H
- | I
- | J
- | K
- | L
- | M
- | N
- | O
- | P
- | Q
- | R
- | S
- | T
- | U
- | V
- | W
- | X
- | Y
- | Z
- | None
- cmdLabel :: Expr a -> Integer
- data Command
- type BASIC = Expr ()
- runBASIC :: BASIC -> IO ()
- runBASIC' :: BASIC -> IO ()
Documentation
Constructors
Instances
| Eq (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| Eq (PRINT -> t -> Expr a) | |
| Eq (PRINT -> Expr a -> Expr b) | |
| Num (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| (Show t, Typeable t) => Num (PRINT -> t -> Expr a) | |
| Num (PRINT -> Expr a -> Expr b) | |
| Show (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| Show (PRINT -> t -> Expr a) | |
| Show (PRINT -> Expr a -> Expr b) |
Constructors
| LET |
Constructors
| IF |
Constructors
| THEN |
Constructors
| INPUT |
Constructors
| FOR |
Constructors
| TO |
Instances
| Eq (TO -> t -> STEP -> s -> Expr a) | |
| Eq (TO -> t -> Expr a) | |
| (Show t, Typeable t, Show s, Typeable s) => Fractional (TO -> t -> STEP -> s -> Expr a) | |
| (Show t, Typeable t) => Fractional (TO -> t -> Expr a) | |
| (Show t, Typeable t, Show s, Typeable s) => Num (TO -> t -> STEP -> s -> Expr a) | |
| (Show t, Typeable t) => Num (TO -> t -> Expr a) | |
| Num (TO -> Expr b -> Expr a) | |
| Show (TO -> t -> STEP -> s -> Expr a) | |
| Show (TO -> t -> Expr a) |
Constructors
| NEXT |
Constructors
| STEP |
Instances
| Monad Expr | |
| Typeable1 Expr | |
| Eq (Expr a) | |
| Fractional (Expr a) | |
| Num (Expr a) | |
| Ord (Expr a) | |
| Show (Expr a) | |
| IsString (Expr a) | |
| Eq (NEXT -> Expr a -> Expr b) | |
| Eq (TO -> t -> STEP -> s -> Expr a) | |
| Eq (TO -> t -> Expr a) | |
| Eq (FOR -> Expr a -> Expr b) | |
| Eq (INPUT -> Expr a -> Expr b) | |
| Eq (THEN -> t -> Expr a) | |
| Eq (IF -> Expr a -> Expr b) | |
| Eq (GOTO -> t -> Expr a) | |
| Eq (LET -> Expr a -> Expr b) | |
| Eq (END -> Expr a) | |
| Eq (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| Eq (PRINT -> t -> Expr a) | |
| Eq (PRINT -> Expr a -> Expr b) | |
| (Show t, Typeable t, Show s, Typeable s) => Fractional (TO -> t -> STEP -> s -> Expr a) | |
| (Show t, Typeable t) => Fractional (TO -> t -> Expr a) | |
| Num (NEXT -> Expr a -> Expr b) | |
| (Show t, Typeable t, Show s, Typeable s) => Num (TO -> t -> STEP -> s -> Expr a) | |
| (Show t, Typeable t) => Num (TO -> t -> Expr a) | |
| Num (TO -> Expr b -> Expr a) | |
| Num (FOR -> Expr a -> Expr b) | |
| Num (INPUT -> Expr a -> Expr b) | |
| Integral t => Num (THEN -> t -> Expr a) | |
| Num (IF -> Expr a -> Expr b) | |
| Integral t => Num (GOTO -> t -> Expr a) | |
| Num (LET -> Expr a -> Expr b) | |
| Num (END -> Expr a) | |
| Num (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| (Show t, Typeable t) => Num (PRINT -> t -> Expr a) | |
| Num (PRINT -> Expr a -> Expr b) | |
| Show (NEXT -> Expr a -> Expr b) | |
| Show (TO -> t -> STEP -> s -> Expr a) | |
| Show (TO -> t -> Expr a) | |
| Show (FOR -> Expr a -> Expr b) | |
| Show (INPUT -> Expr a -> Expr b) | |
| Show (THEN -> t -> Expr a) | |
| Show (IF -> Expr a -> Expr b) | |
| Show (GOTO -> t -> Expr a) | |
| Show (LET -> Expr a -> Expr b) | |
| Show (END -> Expr a) | |
| Show (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| Show (PRINT -> t -> Expr a) | |
| Show (PRINT -> Expr a -> Expr b) |
Constructors
| Cmd Integer Command [Expr a] | |
| Str String | |
| Dbl Double | |
| Label Integer | |
| Binop (Expr a) String (Expr a) | |
| (Expr a) := (Expr a) | |
| SIN (Expr a) | |
| COS (Expr a) | |
| TAN (Expr a) | |
| ATN (Expr a) | |
| EXP (Expr a) | |
| LOG (Expr a) | |
| RND (Expr a) | |
| INT (Expr a) | |
| SGN (Expr a) | |
| ABS (Expr a) | |
| SQR (Expr a) | |
| Var | |
| A | |
| B | |
| C | |
| D | |
| E | |
| F | |
| G | |
| H | |
| I | |
| J | |
| K | |
| L | |
| M | |
| N | |
| O | |
| P | |
| Q | |
| R | |
| S | |
| T | |
| U | |
| V | |
| W | |
| X | |
| Y | |
| Z | |
| None |
Instances
| Monad Expr | |
| Typeable1 Expr | |
| Eq (Expr a) | |
| Fractional (Expr a) | |
| Num (Expr a) | |
| Ord (Expr a) | |
| Show (Expr a) | |
| IsString (Expr a) | |
| Eq (NEXT -> Expr a -> Expr b) | |
| Eq (TO -> t -> STEP -> s -> Expr a) | |
| Eq (TO -> t -> Expr a) | |
| Eq (FOR -> Expr a -> Expr b) | |
| Eq (INPUT -> Expr a -> Expr b) | |
| Eq (THEN -> t -> Expr a) | |
| Eq (IF -> Expr a -> Expr b) | |
| Eq (GOTO -> t -> Expr a) | |
| Eq (LET -> Expr a -> Expr b) | |
| Eq (END -> Expr a) | |
| Eq (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| Eq (PRINT -> t -> Expr a) | |
| Eq (PRINT -> Expr a -> Expr b) | |
| (Show t, Typeable t, Show s, Typeable s) => Fractional (TO -> t -> STEP -> s -> Expr a) | |
| (Show t, Typeable t) => Fractional (TO -> t -> Expr a) | |
| Num (NEXT -> Expr a -> Expr b) | |
| (Show t, Typeable t, Show s, Typeable s) => Num (TO -> t -> STEP -> s -> Expr a) | |
| (Show t, Typeable t) => Num (TO -> t -> Expr a) | |
| Num (TO -> Expr b -> Expr a) | |
| Num (FOR -> Expr a -> Expr b) | |
| Num (INPUT -> Expr a -> Expr b) | |
| Integral t => Num (THEN -> t -> Expr a) | |
| Num (IF -> Expr a -> Expr b) | |
| Integral t => Num (GOTO -> t -> Expr a) | |
| Num (LET -> Expr a -> Expr b) | |
| Num (END -> Expr a) | |
| Num (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| (Show t, Typeable t) => Num (PRINT -> t -> Expr a) | |
| Num (PRINT -> Expr a -> Expr b) | |
| Show (NEXT -> Expr a -> Expr b) | |
| Show (TO -> t -> STEP -> s -> Expr a) | |
| Show (TO -> t -> Expr a) | |
| Show (FOR -> Expr a -> Expr b) | |
| Show (INPUT -> Expr a -> Expr b) | |
| Show (THEN -> t -> Expr a) | |
| Show (IF -> Expr a -> Expr b) | |
| Show (GOTO -> t -> Expr a) | |
| Show (LET -> Expr a -> Expr b) | |
| Show (END -> Expr a) | |
| Show (PRINT -> (Expr c -> Expr c) -> Expr a -> Expr b) | |
| Show (PRINT -> t -> Expr a) | |
| Show (PRINT -> Expr a -> Expr b) |