Bug: Template and Tail-call Optimization

Run Settings
LanguageATS
Language Version
Run Command
#include "share/atspre_staload.hats" extern fun {a:t@ype} show (a): void implement {a} show (x) = gprint_val<a> x datatype maybe (a:t@ype) = | Nothing (a) of () | Just (a) of a implement (a) show<maybe a> (m) = case+ m of // | Nothing () => gprint_val<string> "Nothing" | Nothing () => ignoret (show<string> "Nothing") // | Just x => gprint_val<a> x | Just x => ignoret (show<a> x) // this is a bug due to tail-call optimization // use ignoret, or use patscc --tlcalopt-disable extern fun {a:t@ype} cmp (a, a): int implement {a} cmp (x, y) = gcompare_val_val<a> (x, y) implement (a) cmp<maybe a> (x, y) = case+ (x, y) of | (Nothing _, Nothing _) => 0 | (Nothing _, Just _) => ~1 | (Just _, Nothing _) => 1 | (Just x, Just y) => cmp<a> (x, y) implement main0 () = { val _ = show<maybe int> (Nothing{int} ()) val _ = show<maybe char> (Just ('a')) val _ = cmp<maybe int> (Just 3, Just 5) }
Editor Settings
Theme
Key bindings
Full width
Lines