Index: src/prelude/builtins.c
===================================================================
--- src/prelude/builtins.c	(revision 169d94423f252c409fa619afb3ac75cdecb6f03f)
+++ src/prelude/builtins.c	(revision 17fc7a5c58ecbd12f2c5d589ba0dd9c13424abcc)
@@ -44,41 +44,39 @@
 static inline long int ?\?( long int ep, unsigned long int y ) { // disallow negative exponent
 	if ( y == 0 ) return 1;								// base case
-    if ( ep == 2 ) return ep << (y - 1);				// special case, positive shifting only
-    typeof( ep ) op = 1;								// accumulate odd product
-    for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
+	if ( ep == 2 ) return ep << (y - 1);				// special case, positive shifting only
+	typeof( ep ) op = 1;								// accumulate odd product
+	for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
 		if ( (y & 1) == 1 ) op *= ep;					// odd ?
 		ep *= ep;
 	} // for
-    return ep * op;
+	return ep * op;
 } // ?\?
 
-// FIX ME, cannot resolve the "T op = 1".
-
-// static inline forall( otype T | { void ?{}( T * this, one_t ); T ?*?( T, T ); } )
-// T ?\?( T ep, unsigned long int y ) {
-//     if ( y == 0 ) return 1;
-//     T op = 1;
-//     for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
-// 		if ( (y & 1) == 1 ) op = op * ep;				// odd ?
-// 		ep = ep * ep;
-//     } // for
-//     return ep * op;
-// } // ?\?
+static inline forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); } )
+T ?\?( T ep, unsigned long int y ) {
+	if ( y == 0 ) return 1;
+	T op = 1;
+	for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
+		if ( (y & 1) == 1 ) op = op * ep;				// odd ?
+		ep = ep * ep;
+	} // for
+	return ep * op;
+} // ?\?
 
 // unsigned computation may be faster and larger
 static inline unsigned long int ?\?( unsigned long int ep, unsigned long int y ) { // disallow negative exponent
 	if ( y == 0 ) return 1;								// base case
-    if ( ep == 2 ) return ep << (y - 1);				// special case, positive shifting only
-    typeof( ep ) op = 1;								// accumulate odd product
-    for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
+	if ( ep == 2 ) return ep << (y - 1);				// special case, positive shifting only
+	typeof( ep ) op = 1;								// accumulate odd product
+	for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
 		if ( (y & 1) == 1 ) op *= ep;					// odd ?
 		ep *= ep;
 	} // for
-    return ep * op;
+	return ep * op;
 } // ?\?
 
 static inline double ?\?( long int x, signed long int y ) {	// allow negative exponent
-    if ( y >=  0 ) return (double)(x \ (unsigned long int)y);
-    else return 1.0 / x \ (unsigned int)(-y);
+	if ( y >=  0 ) return (double)(x \ (unsigned long int)y);
+	else return 1.0 / x \ (unsigned int)(-y);
 } // ?\?
 
