blob: c14d45b0340f556806ece427f0cc67ac40cfe8ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
{-# LANGUAGE TemplateHaskell, FlexibleInstances, ScopedTypeVariables #-}
module Math.LinProg.Compile (
compile
,Equation
,CompilerS(..)
,objective
,equals
,leqs
) where
import Math.LinProg.Types
import Control.Lens
import Control.Monad.Free
type Equation t v = (LinExpr t v, t) -- LHS and RHS
data CompilerS t v = CompilerS {
_objective :: LinExpr t v
,_equals :: [Equation t v]
,_leqs :: [Equation t v]
} deriving (Eq)
$(makeLenses ''CompilerS)
compile :: (Num t, Show t, Ord t, Eq v) => LinProg t v () -> CompilerS t v
compile ast = compile' ast initCompilerS where
compile' (Free (Objective a c)) state = compile' c $ state & objective +~ a
compile' (Free (EqConstraint a b c)) state = compile' c $ state & equals %~ (split (a-b):)
compile' (Free (LeqConstraint a b c)) state = compile' c $ state & leqs %~ (split (a-b):)
compile' _ state = state
initCompilerS = CompilerS
0
[]
[]
|