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 |