[GHC] #13855: Syntactic sugar to write the recursion in GHC
GHC
ghc-devs at haskell.org
Wed Jun 21 10:33:03 UTC 2017
#13855: Syntactic sugar to write the recursion in GHC
-------------------------------------+-------------------------------------
Reporter: vanto | Owner: (none)
Type: feature | Status: new
request |
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
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.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13855>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list