{-# LANGUAGE GeneralizedNewtypeDeriving, TypeFamilies #-}
module Data.Module.Primitive where

import Data.Default
import Data.Module.Class
import Data.Monoid

newtype Unit x = Unit () deriving Monoid

instance Default x => Module (Unit x) where
	type V (Unit x) = x
	apply _ = Just

instance Default x => Module (First x) where
	type V (First x) = x
	apply (First Nothing  ) x = Just x
	apply (First (Just x')) x = Just x'