--- /dev/null
+toInt(x) :: Char -> Int{
+ if(x == '0'){ return 0;
+ } else { if(x == '1'){ return 1;
+ } else { if(x == '2'){ return 2;
+ } else { if(x == '3'){ return 3;
+ } else { if(x == '4'){ return 4;
+ } else { if(x == '5'){ return 5;
+ } else { if(x == '6'){ return 6;
+ } else { if(x == '7'){ return 7;
+ } else { if(x == '8'){ return 8;
+ } else { if(x == '9'){ return 9;
+ } else { return -1; }}}}}}}}}}
+}
+
+toChar(x) :: Int -> Char{
+ if(x == 0){ return '0';
+ } else { if(x == 1){ return '1';
+ } else { if(x == 2){ return '2';
+ } else { if(x == 3){ return '3';
+ } else { if(x == 4){ return '4';
+ } else { if(x == 5){ return '5';
+ } else { if(x == 6){ return '6';
+ } else { if(x == 7){ return '7';
+ } else { if(x == 8){ return '8';
+ } else { if(x == 9){ return '9';
+ } else { return '0'; }}}}}}}}}}
+}
+
+isDigit(x) :: Char -> Bool {
+ return toInt(x) != -1;
+}
+
+strToInt(x) :: [Char] -> Int {
+ [Char] xs = x;
+ var i = 0;
+ var m = 1;
+ if(!isEmpty(x)){
+ if(xs.hd == '-'){
+ xs = xs.tl;
+ m = -1;
+ }
+
+ while(!isEmpty(xs)){
+ i = i*10 + toInt(xs.hd);
+ xs = xs.tl;
+ }
+ }
+ return i*m;
+}
+
+printList(p, l) :: (a -> Void) -> [a] -> Void {
+ print('[');
+ if(!isEmpty(l)){
+ p(l.hd);
+ l = l.tl;
+ }
+ while(!isEmpty(l)){
+ print(", ");
+ p(l.hd);
+ l = l.tl;
+ }
+ print("]\n");
+}
+
+printInt(x) {
+ [Char] l = [];
+ if(x < 0){
+ print('-');
+ x = -x;
+ }
+ while(x > 0){
+ l = toChar(x % 10) : l;
+ x = x / 10;
+ }
+ print(l);
+}
+
+printBool(b) :: Bool -> Void {
+ print(b);
+}
+
+main(){
+ var num = "-1234";
+
+ printList(printInt, [32, 4, strToInt(num)]);
+ printList(printBool, [True, False, True, True]);
+}