Implement check of bidirectionalizability.
[darcs-mirror-sem_syn.git] / BUtil.hs
index 133dc27..b134db7 100644 (file)
--- a/BUtil.hs
+++ b/BUtil.hs
@@ -8,7 +8,18 @@ import System.IO.Unsafe
 
 import Control.Exception
 
-data Nat = S Nat | Z deriving (Show,Eq)
+data Nat = S Nat | Z deriving (Eq)
+
+instance Show Nat where
+  show = show . fromNat
+
+instance Num Nat where
+  (+) = error "No operators defined for Nat"
+  (*) = error "No operators defined for Nat"
+  abs = error "No operators defined for Nat"
+  signum = error "No operators defined for Nat"
+  fromInteger n | n < 0  = error "Nat cannot be negative"
+                | n >= 0 = toNat n
 
 toNat x = if x == 0 then 
               Z
@@ -65,5 +76,5 @@ castError f = unsafePerformIO $
 type Bias = Int -> [ Int ]
 rear l    = [ 0 .. l - 1 ]
 front l   = reverse [ 0 .. l - 1 ]
-middle l  = [1,3..l] + (reverse [2,4..l])
-borders l = (reverse [1,3..l])+[2,4..l]
+middle l  = [1,3..l] ++ (reverse [2,4..l])
+borders l = (reverse [1,3..l])++[2,4..l]