Skip to content

Instantly share code, notes, and snippets.

@urso
Created November 7, 2010 13:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save urso/666119 to your computer and use it in GitHub Desktop.
Save urso/666119 to your computer and use it in GitHub Desktop.
AwesomePrelude example
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE GADTs #-}
module MyLang where
import Prelude (Integer(..), Show(..),String(..))
import qualified Prelude as P
import Generic.Data.Bool
import Generic.Data.Num
data MyLang a where
MLFalse :: MyLang Bool
MLTrue :: MyLang Bool
MLValue :: a -> MyLang a
instance BoolC MyLang where
false = MLFalse
true = MLTrue
bool t _ MLTrue = t
bool _ e MLFalse = e
instance Num MyLang Integer where
fromInteger = MLValue
(MLValue a) + (MLValue b) = MLValue (a P.+ b)
(MLValue a) - (MLValue b) = MLValue (a P.- b)
(MLValue a) * (MLValue b) = MLValue (a P.* b)
test :: MyLang Integer
test = if' true (3 + 4) (4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment