{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TemplateHaskell #-} {- | Just pretend this module is part of Physics.Constraint. Last time I checked, GeneralizedNewtypeDeriving didn't work on Lagrangian in Physics.Constraint. -} module Physics.Constraint.Types where import Control.DeepSeq import Control.Lens import Data.Vector.Unboxed.Deriving -- TODO: Why doesn't GeneralizedNewtypeDeriving work in Physics.Constraint? -- | Lagrangian multiplier - the (signed) magnitude of the impulse -- required to solve a constraint equation. newtype Lagrangian = Lagrangian { _lagrangianVal :: Double } deriving (Show, Num, Eq, Ord, NFData) makeLenses ''Lagrangian derivingUnbox "Lagrangian" [t| Lagrangian -> Double |] [| \(Lagrangian l) -> l |] [| Lagrangian |]