Skip to content

Instantly share code, notes, and snippets.

@rrichardson
Created June 11, 2013 17:53
Show Gist options
  • Save rrichardson/5759119 to your computer and use it in GitHub Desktop.
Save rrichardson/5759119 to your computer and use it in GitHub Desktop.
module Expressions where
import Text.ParserCombinators.Parsec
import Control.Monad
import Control.Monad.Error
import System.IO
data Term a = IntVal Integer
| StrVal String
| RealVal Double
data Expr a = BinOp String (Expr a) (Expr a)
| UnOp String (Expr a)
| Fun String (Expr a)
| Ident String
| IfElse (Expr a) (Expr a) (Expr a)
| Cond (Expr a) [Expr a]
| Term a
deriving (Show, Eq)
evaluate :: (Eq a) => Expr a -> b
evaluate (BinOp "+" e1 e2) = (evaluate e1) + (evaluate e2)
evaluate (Term (IntVal i)) = i
evaluate (Term (StrVal s)) = s
evaluate (Term (RealVal r)) = r
evaluate _ = undefined
------
Expressions.hs:24:30:
Couldn't match type `Integer' with `[Char]'
Expected type: b
Actual type: String
In the expression: s
In an equation for `evaluate': evaluate (Term (StrVal s)) = s
Expressions.hs:25:31:
Couldn't match type `Integer' with `Double'
Expected type: b
Actual type: Double
In the expression: r
In an equation for `evaluate': evaluate (Term (RealVal r)) = r
Failed, modules loaded: none.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment