Haskulator

Run Settings
LanguageHaskell
Language Version
Run Command
--First Edition. Need to rewrite to include lexer then parser to implement brackets import Control.Arrow splitAtFirst :: Eq a => a -> [a] -> ([a], [a]) splitAtFirst x = (id *** drop 1) . break (x ==) toFloat :: String -> Float toFloat x = read x :: Float parseInputs :: (String,String) -> String -> Float parseInputs (a,b) op | op == "+" = (parseInput a) + (parseInput b) | op == "-" = (parseInput a) - (parseInput b) | op == "*" = (parseInput a) * (parseInput b) | op == "/" = (parseInput a) / (parseInput b) | op == "^" = (parseInput a) ** (parseInput b) parseInput :: String -> Float parseInput xs | '+' `elem` xs = parseInputs (splitAtFirst '+' xs) "+" | '-' `elem` xs = parseInputs (splitAtFirst '-' xs) "-" | '*' `elem` xs = parseInputs (splitAtFirst '*' xs) "*" | '/' `elem` xs = parseInputs (splitAtFirst '/' xs) "/" | '^' `elem` xs = parseInputs (splitAtFirst '^' xs) "^" | otherwise = toFloat xs main = do print(parseInput "1+2+3+4") print(parseInput "3-2") print(parseInput "3*2") print(parseInput "10/5") print(parseInput "2+1*3-1") print(parseInput "3-4/2") print(parseInput "3^2") print(parseInput "2^2+1")
Lexer: String -> [Token] Parser: [Token] -> SyntaxTree SyntaxTree -> FinalExpression (Float) Example: "1*(2+3/(5-4))" => 1,*,(,2,+,3,/,(,5,-,4,),) or 1,*,(2,+,3,/,(5,-,4))
Editor Settings
Theme
Key bindings
Full width
Lines