packages feed

glpk-hs 0.2.1 → 0.2.2

raw patch · 3 files changed

+76/−1 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.LinearProgram.LPMonad: class (Monad m) => MonadSource x m | m -> x
+ Data.LinearProgram.LPMonad: data Var
+ Data.LinearProgram.LPMonad: data VarSourceT m a
+ Data.LinearProgram.LPMonad: evalVarSource :: VarSource a -> a
+ Data.LinearProgram.LPMonad: evalVarSourceT :: (Monad m) => VarSourceT m a -> m a
+ Data.LinearProgram.LPMonad: makeNew :: (MonadSource x m) => m x
+ Data.LinearProgram.LPMonad: type VarSource = VarSourceT Identity

Files

Data/LinearProgram/LPMonad.hs view
@@ -8,6 +8,7 @@ -- Many of these functions should be executed in either the @'LPM' v c@ or the @'LPT' v c 'IO'@ monad. module Data.LinearProgram.LPMonad ( 	module Data.LinearProgram.LPMonad.Internal,+	module Data.LinearProgram.LPMonad.VarSource, 	-- * Solvers 	quickSolveMIP, 	quickSolveLP,@@ -28,6 +29,7 @@  import Data.LinearProgram.Common import Data.LinearProgram.LPMonad.Internal+import Data.LinearProgram.LPMonad.VarSource  import Data.LinearProgram.GLPK.Solver import Data.LinearProgram.GLPK.IO
+ Data/LinearProgram/LPMonad/VarSource.hs view
@@ -0,0 +1,72 @@+{-# LANGUAGE UndecidableInstances, FlexibleInstances, GeneralizedNewtypeDeriving, FunctionalDependencies, MultiParamTypeClasses #-}+module Data.LinearProgram.LPMonad.VarSource (+	-- * Types for automatically generating distinct variables+	VarSource, VarSourceT, Var, MonadSource(..), evalVarSource, evalVarSourceT) where++import Control.Monad+import Control.Monad.State.Strict+import Control.Monad.Reader+import qualified Control.Monad.Writer.Lazy as WL+import qualified Control.Monad.Writer.Strict as WS+import qualified Control.Monad.State.Lazy as SL+import Control.Monad.Cont+-- import Control.Monad+import Control.Monad.Identity+import Control.Monad.Trans+import Control.Monad.RWS.Class++import Data.Monoid++-- | A type suitable for use as a variable in linear programs.+newtype Var = Var Int deriving (Eq, Ord, Enum)+-- | A monad capable of generating unique variables. +type VarSource = VarSourceT Identity+-- | A monad transformer capable of generating unique variables.  To generate variables while constructing a linear program in the 'LPT' monad, work in the monad @'LPT' 'Var' c 'VarSource'@ or @'LPT' 'Var' c ('VarSourceT' m)@.+newtype VarSourceT m a = VarSourceT {runVarSourceT :: StateT Var m a} deriving (Monad, MonadReader r, MonadWriter w, MonadIO, MonadFix,+	MonadTrans, MonadCont)++evalVarSource :: VarSource a -> a+evalVarSource = runIdentity . evalVarSourceT++evalVarSourceT :: Monad m => VarSourceT m a -> m a+evalVarSourceT m = evalStateT (runVarSourceT m) (Var 0)++instance Show Var where+	show (Var x) = "x_" ++ show x++instance Read Var where+	readsPrec _ ('x':'_':xs) = [(Var x, s') | (x, s') <- readsPrec 0 xs]++instance MonadState s m => MonadState s (VarSourceT m) where+	put x = VarSourceT (lift (put x))+	get = VarSourceT (lift get)++-- instance MonadTrans VarSource where+-- 	lift ++-- | A type class for monads capable of repeatedly generating unique elements of a specified type.+class Monad m => MonadSource x m | m -> x where+	makeNew :: m x++instance Monad m => MonadSource Var (VarSourceT m) where+	makeNew = VarSourceT $ do	v <- get+					put (succ v)+					return v++instance MonadSource x m => MonadSource x (StateT s m) where+	makeNew = lift makeNew++instance MonadSource x m => MonadSource x (ReaderT r m) where+	makeNew = lift makeNew++instance (MonadSource x m, Monoid w) => MonadSource x (WL.WriterT w m) where+	makeNew = lift makeNew++instance (MonadSource x m, Monoid w) => MonadSource x (WS.WriterT w m) where+	makeNew = lift makeNew++instance MonadSource x m => MonadSource x (ContT r m) where+	makeNew = lift makeNew++instance MonadSource x m => MonadSource x (SL.StateT s m) where+	makeNew = lift makeNew
glpk-hs.cabal view
@@ -1,5 +1,5 @@ Name:           glpk-hs-Version:        0.2.1+Version:        0.2.2 Author:         Louis Wasserman License:        GPL License-file:   LICENSE@@ -36,6 +36,7 @@                   Data.LinearProgram.GLPK.Common,                   Data.LinearProgram.GLPK.IO.Internal,                   Data.LinearProgram.LPMonad.Internal,+                  Data.LinearProgram.LPMonad.VarSource                   Data.LinearProgram.Spec,                   Data.LinearProgram.Types,                   Data.Algebra.Group,