Skip to content

Syntactic sugar to write the recursion in GHC

The recursion is defined by two case that are a base case and a recursive case.\\ Instead of writing two functions to describe the recursion, I propose to write a single function that makes both.\\

<op> should be set to tell the compiler how to compile the function.\\

syntaxe :

exp = <base_case_exp1;...;base_case_expn> <op>
<recursive_case_exp1;...;recursive_case_expn>
<recursive_case_guards>

examples:

fac :: Int -> Int
fac n = 0 = 1 <op> n * fac (n-1)
product :: Num a => [a] -> a
product (n:ns) = [] = 1 <op> n * product ns
reverse :: [a] -> [a]
reverse (x:xs) = [] = [] <op> reverse xs ++ [x]
insert :: Ord a => a -> [a] -> [a]
insert x (y:ys) = x [] = [x] <op> | x <= y = x:y:ys
                                  | otherwise = y:insert x ys
drop :: Int -> [a] -> [a]
drop n (_:xs) = 0 xs = xs; _ [] = [] <op> drop (n-1) xs
fib :: Int -> Int
fib n = 0 = 0; 1 = 1 <op> fib (n-2) + fib (n-1)

If someone is interested in this, I encourage him to write a proposal. I don't know how to do it.

Trac metadata
Trac field Value
Version 8.0.2
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information