module Numeric.LAPACK.ComfortArray.Demo where import qualified Numeric.LAPACK.ComfortArray.Float as Lapack import Numeric.Netlib.ComfortArray.Utility (ZeroInt) import qualified Data.Array.Comfort.Storable.Mutable as MutArray import qualified Data.Array.Comfort.Storable as Array import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Storable (Array) import Control.Monad (liftM2) gels :: Array (ZeroInt,ZeroInt) Float -> Array (ZeroInt,ZeroInt) Float -> IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float) gels :: Array (ZeroInt, ZeroInt) Float -> Array (ZeroInt, ZeroInt) Float -> IO (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float) gels Array (ZeroInt, ZeroInt) Float a Array (ZeroInt, ZeroInt) Float b = do Array IO (ZeroInt, ZeroInt) Float ioa <- Array (ZeroInt, ZeroInt) Float -> IO (Array IO (ZeroInt, ZeroInt) Float) forall (m :: * -> *) sh a. (PrimMonad m, C sh, Storable a) => Array sh a -> m (Array m sh a) MutArray.thaw Array (ZeroInt, ZeroInt) Float a Array IO (ZeroInt, ZeroInt) Float iob <- Array (ZeroInt, ZeroInt) Float -> IO (Array IO (ZeroInt, ZeroInt) Float) forall (m :: * -> *) sh a. (PrimMonad m, C sh, Storable a) => Array sh a -> m (Array m sh a) MutArray.thaw Array (ZeroInt, ZeroInt) Float b Int -> IO () forall a. Show a => a -> IO () print (Int -> IO ()) -> IO Int -> IO () forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Char -> Int -> Array IO (ZeroInt, ZeroInt) Float -> Array IO (ZeroInt, ZeroInt) Float -> Int -> IO Int Lapack.gels Char 'N' Int 3 Array IO (ZeroInt, ZeroInt) Float ioa Array IO (ZeroInt, ZeroInt) Float iob Int 100 (Array (ZeroInt, ZeroInt) Float -> Array (ZeroInt, ZeroInt) Float -> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)) -> IO (Array (ZeroInt, ZeroInt) Float) -> IO (Array (ZeroInt, ZeroInt) Float) -> IO (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float) forall (m :: * -> *) a1 a2 r. Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r liftM2 (,) (Array IO (ZeroInt, ZeroInt) Float -> IO (Array (ZeroInt, ZeroInt) Float) forall (m :: * -> *) sh a. (PrimMonad m, C sh, Storable a) => Array m sh a -> m (Array sh a) MutArray.freeze Array IO (ZeroInt, ZeroInt) Float ioa) (Array IO (ZeroInt, ZeroInt) Float -> IO (Array (ZeroInt, ZeroInt) Float) forall (m :: * -> *) sh a. (PrimMonad m, C sh, Storable a) => Array m sh a -> m (Array sh a) MutArray.freeze Array IO (ZeroInt, ZeroInt) Float iob) main :: IO () main :: IO () main = let z3 :: ZeroInt z3 = Int -> ZeroInt forall n. n -> ZeroBased n Shape.ZeroBased Int 3 in (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float) -> IO () forall a. Show a => a -> IO () print ((Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float) -> IO ()) -> IO (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float) -> IO () forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Array (ZeroInt, ZeroInt) Float -> Array (ZeroInt, ZeroInt) Float -> IO (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float) gels ((ZeroInt, ZeroInt) -> [Float] -> Array (ZeroInt, ZeroInt) Float forall sh a. (C sh, Storable a) => sh -> [a] -> Array sh a Array.fromList (ZeroInt z3,ZeroInt z3) [Float 1,Float 2,Float 3,Float 0,Float 1,Float 4,Float 0,Float 0,Float 1]) ((ZeroInt, ZeroInt) -> [Float] -> Array (ZeroInt, ZeroInt) Float forall sh a. (C sh, Storable a) => sh -> [a] -> Array sh a Array.fromList (ZeroInt z3,ZeroInt z3) [Float 1,Float 0,Float 0,Float 0,Float 1,Float 0,Float 0,Float 0,Float 1])