189 | No_Partials |
189 | No_Partials |
190 | Tailrec |
190 | Tailrec |
191 |
191 |
192 datatype function_config = FunctionConfig of |
192 datatype function_config = FunctionConfig of |
193 {sequential: bool, |
193 {sequential: bool, |
194 default: string, |
194 default: string option, |
195 domintros: bool, |
195 domintros: bool, |
196 partials: bool, |
196 partials: bool, |
197 tailrec: bool} |
197 tailrec: bool} |
198 |
198 |
199 fun apply_opt Sequential (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
199 fun apply_opt Sequential (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
200 FunctionConfig {sequential=true, default=default, domintros=domintros, partials=partials, tailrec=tailrec} |
200 FunctionConfig {sequential=true, default=default, domintros=domintros, partials=partials, tailrec=tailrec} |
201 | apply_opt (Default d) (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
201 | apply_opt (Default d) (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
202 FunctionConfig {sequential=sequential, default=d, domintros=domintros, partials=partials, tailrec=tailrec} |
202 FunctionConfig {sequential=sequential, default=SOME d, domintros=domintros, partials=partials, tailrec=tailrec} |
203 | apply_opt DomIntros (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
203 | apply_opt DomIntros (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
204 FunctionConfig {sequential=sequential, default=default, domintros=true, partials=partials, tailrec=tailrec} |
204 FunctionConfig {sequential=sequential, default=default, domintros=true, partials=partials, tailrec=tailrec} |
205 | apply_opt Tailrec (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
205 | apply_opt Tailrec (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
206 FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=partials, tailrec=true} |
206 FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=partials, tailrec=true} |
207 | apply_opt No_Partials (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
207 | apply_opt No_Partials (FunctionConfig {sequential, default, domintros, partials, tailrec}) = |
208 FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=false, tailrec=true} |
208 FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=false, tailrec=true} |
209 |
209 |
210 val default_config = |
210 val default_config = |
211 FunctionConfig { sequential=false, default="%x. undefined" (*FIXME dynamic scoping*), |
211 FunctionConfig { sequential=false, default=NONE, |
212 domintros=false, partials=true, tailrec=false } |
212 domintros=false, partials=true, tailrec=false } |
213 |
213 |
214 |
214 |
215 (* Analyzing function equations *) |
215 (* Analyzing function equations *) |
216 |
216 |