[Haskell-cafe] Joy Combinators (Occurs check: infinite type)
Keean Schupke
k.schupke at imperial.ac.uk
Wed Mar 9 18:13:08 EST 2005
Greg Buchholz wrote:
>Keean Schupke wrote:
>
>
>>Haskell is not dependantly typed, so cannot deal with types that "depend" on
>>values.
>>
>>
>
> Can anyone recommend a nice dependently typed language to play with?
>Cayenne, Epigram, other?
>
I have refactored your code into a type level Haskell program.
This has the nice advantage that it is extensible. You can add a new
primitive to the language as:
data PrimName
primName :: PrimName
primName = undefined
instance Apply PrimName a b where
apply _ a = {- method implementing primName -}
Programs are assembled as types like:
fac4 = lit nul `o` lit suc `o` lit (dup `o` pre)
`o` lit mult `o` linrec
Recursion requires a primitive to aviod infinite types, see
definitions of times, linrec and genrec.
programs are run by applying the contructed type representing the
program to a stack... for example:
putStrLn $ show $ apply (lit hThree `o` fac4) hNil
We could have written this:
putStrLn $ show $ apply fac4 (hCons hThree hNil)
I have attached the debugged code, simply load into ghci, in the same
directory as the HList library (download http://www.cwi.nl/~ralf/HList)
as Joy.hs.
ghci -fallow-overlapping-instances Joy.hs
(you need the flag to get the code to run interactively, however you
dont need the flag just to run 'main' to perform the factorial tests)
Keean.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Joy.hs
Type: text/x-haskell
Size: 7468 bytes
Desc: not available
Url : http://www.haskell.org//pipermail/haskell-cafe/attachments/20050309/836087ab/Joy-0001.bin
More information about the Haskell-Cafe
mailing list