-export function thenDo<T>(input : Maybe<T>, f : Function) : Maybe<T>{
- if (input._tag == "None"){
- return input;
- }
- else{
- let inner = input.value;
- return f(inner);
+function notDo(f : Function){
+ return (x : TokenPair) =>{
+ let res1 : Maybe<TokenPair> = f(x);
+ if (res1._tag == "Some"){
+ return {_tag:"None"};
+ }else{
+ let res2 = matchAny(x);
+ return res2;
+ }
+ }
+}
+
+function matchToken(typeName : string, value? : string):
+ (t : TokenPair) => Maybe<TokenPair>{
+ return (t)=>{
+ let headToken = t.remained[0];
+ if (headToken.type != typeName){
+ return {_tag:"None"};
+ }else{
+ if (value === undefined || value == headToken.value){
+ let newTokenPair = {
+ matched: t.matched.concat(headToken),
+ remained: t.remained.slice(1),
+ ast : [headToken]
+ };
+ return {_tag : "Some", value : newTokenPair};
+ }else{
+ return {_tag:"None"};
+ }
+ };