]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/ShortcutFusion.scl
(refs #7307) Added features field to SCL module header
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / scl / ShortcutFusion.scl
1 data List a = Nil | Cons a (List a)
2
3 @private
4 @inline
5 build :: (forall a. a -> (b -> a -> a) -> a) -> List b
6 build f = f Nil Cons
7
8 @private
9 foldr :: (a -> b -> b) -> b -> List a -> b
10 foldr cons nil Nil = nil
11 foldr cons nil (Cons h t) = cons h (foldr cons nil t)
12
13 @private
14 @inline
15 singleton :: a -> List a
16 singleton x = build (\nil cons -> cons x nil)
17
18 @private
19 @inline
20 last :: List a -> a -> a
21 last l def = foldr (\x _ -> x) def l
22
23 main = last (singleton "Hello") "Foo"
24 --
25 Hello