{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE MultiParamTypeClasses,TypeFamilies,FlexibleInstances #-}

module QuickWeave.Runtime.Applyable where

class Applyable a b where
  type Result a b 
  fromApp :: a -> b -> Result a b
 
instance (a~a') => Applyable (a->b) a' where
  type Result (a->b) a' = b
  fromApp f x = f x  