Changeset 15492

Show
Ignore:
Timestamp:
03/06/07 12:59:21 (21 months ago)
Author:
audreyt
Message:

* Pugs.Class: Auto-generate all pure MethodPrimable? instances

from Eval instances.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Class.hs

    r15490 r15492  
    6969    asPrim f x _ = ivDispatch (mkVal x) f 
    7070 
     71-- Auto-generate pure instances from Eval instances 
     72instance MethodPrimable (a -> b -> Eval z) a => MethodPrimable (a -> b -> z) a where 
     73    asPrim f = asPrim ((\x args -> return (f x args)) :: (a -> b -> Eval z)) 
     74 
    7175instance (Boxable a, Boxable z) => MethodPrimable (a -> z) a where 
    7276    asPrim f x _ = return (mkVal (f x)) 
     
    7579    asPrim f x _ = fmap mkVal (f x) 
    7680 
    77 instance (Boxable a, Boxable z) => MethodPrimable (a -> Val -> z) a where 
    78     asPrim f x args = return (mkVal (f x (args !: 0))) 
    79  
    8081instance (Boxable a, Boxable z) => MethodPrimable (a -> Val -> Eval z) a where 
    8182    asPrim f x args = fmap mkVal (f x (args !: 0)) 
    8283 
    83 instance (Boxable a, Boxable z) => MethodPrimable (a -> [:Val:] -> z) a where 
    84     asPrim f x args = return (mkVal (f x args)) 
     84instance (Boxable a, Boxable z) => MethodPrimable (a -> [:Val:] -> Eval z) a where 
     85    asPrim f x args = fmap mkVal (f x args) 
    8586 
    86 instance (Boxable a, Boxable z) => MethodPrimable (a -> [Val] -> z) a where 
    87     asPrim f x args = return (mkVal (f x (cast args))) 
     87instance (Boxable a, Boxable z) => MethodPrimable (a -> [Val] -> Eval z) a where 
     88    asPrim f x args = fmap mkVal (f x (cast args)) 
    8889 
    89 instance (Boxable a, Boxable b, Boxable z) => MethodPrimable (a -> [b] -> z) a where 
     90instance (Boxable a, Boxable b, Boxable z) => MethodPrimable (a -> [b] -> Eval z) a where 
    9091    asPrim f x args = do 
    9192        args' <- mapM coerceVal (cast args) 
    92         return (mkVal (f x args')) 
     93        fmap mkVal (f x args') 
    9394 
    94 instance (Boxable a, Boxable b, Boxable z) => MethodPrimable (a -> b -> z) a where 
     95instance (Boxable a, Boxable b, Boxable z) => MethodPrimable (a -> b -> Eval z) a where 
    9596    asPrim f x args = do 
    9697        y <- coerceVal (args !: 0) 
    97         return (mkVal (f x y)) 
     98        fmap mkVal (f x y) 
    9899 
    99100(...) :: MethodPrimable a b => String -> a -> (ID, MethodPrim b)