{-# LANGUAGE TypeFamilies #-} module Data.Module.Product where import Control.Monad import Data.Default import Data.Module.Class instance (Module dX, Module dY) => Module (dX, dY) where type V (dX, dY) = (V dX, V dY) apply (dx, dy) (x, y) = liftM2 (,) (apply dx x) (apply dy y)