module Numeric.HiGHS.LP.Example {-# WARNING "Only for documentation. Do not import." #-} where import qualified Numeric.HiGHS.LP as LP import Numeric.HiGHS.LP ((.*), (==.)) import qualified Data.Array.Comfort.Storable as Array import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Storable (Array) import Data.Tuple.HT (mapSnd) import Text.Printf (printf) type X = Shape.Element type PairShape = Shape.NestedTuple Shape.TupleIndex (X,X) main :: IO () main = case Shape.indexTupleFromShape (Shape.static :: PairShape) of (posIx,negIx) -> case fmap (mapSnd Array.toTuple) $ snd $ LP.solve LP.choose [] [[1.*posIx, (-1).*negIx] ==. 314] (LP.Minimize, Array.fromTuple (23,42) :: Array PairShape Double) of Just (absol, (pos, neg)) -> printf "absol %f, pos %f, neg %f\n" absol pos neg _ -> fail "HiGHS solver failed"