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 +2/−0
- Data/LinearProgram/LPMonad/VarSource.hs +72/−0
- glpk-hs.cabal +2/−1
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,