netlib-carray 0.0 → 0.0.1
raw patch · 2 files changed
+51/−66 lines, 2 filesdep +netlib-ffidep −storable-complexPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: netlib-ffi
Dependencies removed: storable-complex
API changes (from Hackage documentation)
+ Numeric.Netlib.CArray.Utility: complex :: Real a => Complex a -> FortranIO r Ptr Complex a
+ Numeric.Netlib.CArray.Utility: number :: Floating a => a -> FortranIO r Ptr a
+ Numeric.Netlib.CArray.Utility: real :: Real a => a -> FortranIO r Ptr a
- Numeric.Netlib.CArray.Utility: alloca :: (Storable a) => FortranIO r (Ptr a)
+ Numeric.Netlib.CArray.Utility: alloca :: Storable a => FortranIO r Ptr a
- Numeric.Netlib.CArray.Utility: allocaArray :: (Storable a) => Int -> FortranIO r (Ptr a)
+ Numeric.Netlib.CArray.Utility: allocaArray :: Storable a => Int -> FortranIO r Ptr a
- Numeric.Netlib.CArray.Utility: bool :: Bool -> FortranIO r (Ptr Bool)
+ Numeric.Netlib.CArray.Utility: bool :: () => Bool -> FortranIO r Ptr Bool
- Numeric.Netlib.CArray.Utility: char :: Char -> FortranIO r (Ptr CChar)
+ Numeric.Netlib.CArray.Utility: char :: () => Char -> FortranIO r Ptr CChar
- Numeric.Netlib.CArray.Utility: cint :: Int -> FortranIO r (Ptr CInt)
+ Numeric.Netlib.CArray.Utility: cint :: () => Int -> FortranIO r Ptr CInt
- Numeric.Netlib.CArray.Utility: complexDouble :: Complex Double -> FortranIO r (Ptr (Complex Double))
+ Numeric.Netlib.CArray.Utility: complexDouble :: () => Complex Double -> FortranIO r Ptr Complex Double
- Numeric.Netlib.CArray.Utility: complexFloat :: Complex Float -> FortranIO r (Ptr (Complex Float))
+ Numeric.Netlib.CArray.Utility: complexFloat :: () => Complex Float -> FortranIO r Ptr Complex Float
- Numeric.Netlib.CArray.Utility: double :: Double -> FortranIO r (Ptr Double)
+ Numeric.Netlib.CArray.Utility: double :: () => Double -> FortranIO r Ptr Double
- Numeric.Netlib.CArray.Utility: float :: Float -> FortranIO r (Ptr Float)
+ Numeric.Netlib.CArray.Utility: float :: () => Float -> FortranIO r Ptr Float
- Numeric.Netlib.CArray.Utility: run :: FortranIO r (IO a) -> FortranIO r a
+ Numeric.Netlib.CArray.Utility: run :: () => FortranIO r IO a -> FortranIO r a
- Numeric.Netlib.CArray.Utility: runChecked :: String -> FortranIO r (Ptr CInt -> IO a) -> FortranIO r a
+ Numeric.Netlib.CArray.Utility: runChecked :: () => String -> FortranIO r (Ptr CInt -> IO a) -> FortranIO r a
- Numeric.Netlib.CArray.Utility: string :: String -> FortranIO r (Ptr CChar)
+ Numeric.Netlib.CArray.Utility: string :: () => String -> FortranIO r Ptr CChar
- Numeric.Netlib.CArray.Utility: type FortranIO r = ContT r IO
+ Numeric.Netlib.CArray.Utility: type FortranIO r = ContT * r IO
Files
- netlib-carray.cabal +3/−3
- src/Numeric/Netlib/CArray/Utility.hs +48/−63
netlib-carray.cabal view
@@ -1,5 +1,5 @@ Name: netlib-carray-Version: 0.0+Version: 0.0.1 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -20,7 +20,7 @@ Build-Type: Simple Source-Repository this- Tag: 0.0+ Tag: 0.0.1 Type: darcs Location: http://hub.darcs.net/thielema/netlib-carray/ @@ -30,8 +30,8 @@ Library Build-Depends:+ netlib-ffi >=0.0.1 && <0.1, carray >=0.1.5 && <0.2,- storable-complex >=0.2.2 && <0.3, transformers >=0.4 && <0.6, base >=4.5 && <5
src/Numeric/Netlib/CArray/Utility.hs view
@@ -1,48 +1,62 @@-module Numeric.Netlib.CArray.Utility where+module Numeric.Netlib.CArray.Utility (+ FortranIO,+ Util.run,+ Util.runChecked,+ Util.check,+ Util.assert,+ Util.ignore,+ Util.cint,+ Util.alloca,+ Util.allocaArray,+ Util.bool,+ Util.char,+ Util.string,+ Util.float,+ Util.double,+ Util.complexFloat,+ Util.complexDouble,+ Util.real,+ Util.complex,+ Util.number, + newArray,+ newArray1,+ newArray2,+ newArray3,+ sizes1,+ sizes2,+ sizes3,+ range,+ array,+ arrayBounds,+ ioarray,+ unzipBounds,+ (^!),+ ) where++import qualified Numeric.Netlib.Utility as Util+import Numeric.Netlib.Utility (FortranIO)+ import qualified Data.Array.CArray as CArray import Data.Array.IOCArray (IOCArray, withIOCArray) import Data.Array.CArray (CArray, withCArray, Ix) -import qualified Foreign.Marshal.Utils as Marshal-import qualified Foreign.Marshal.Array as Array-import qualified Foreign.Marshal.Alloc as Alloc-import qualified Foreign.C.String as CStr import qualified Foreign.C.Types as C-import Foreign.Storable.Complex ()-import Foreign.Storable (Storable, peek)+import Foreign.Storable (Storable) import Foreign.Ptr (Ptr) import Control.Monad.Trans.Cont (ContT(ContT))-import Control.Monad.IO.Class (liftIO)-import Control.Monad (when) import Control.Applicative ((<$>)) -import Data.Complex (Complex) --type FortranIO r = ContT r IO--run :: FortranIO r (IO a) -> FortranIO r a-run act = act >>= liftIO--runChecked :: String -> FortranIO r (Ptr C.CInt -> IO a) -> FortranIO r a-runChecked name act = do- info <- alloca- a <- run $ fmap ($info) act- liftIO $ check name (peek info)- return a--check :: String -> IO C.CInt -> IO ()-check msg f = do- err <- f- when (err/=0) $ error $ msg ++ ": " ++ show err--assert :: String -> Bool -> IO ()-assert msg success = when (not success) $ error $ "assertion failed: " ++ msg--ignore :: String -> Int -> IO ()-ignore _msg _dim = return ()+_match :: (Show a, Eq a) => String -> String -> a -> [a] -> a+_match func name a as =+ case filter (a/=) as of+ [] -> a+ adiff:_ ->+ error $+ func ++ ": mismatching " ++ name ++ ": " +++ show a ++ " /= " ++ show adiff newArray :: (Ix i, Storable e) => (i, i) -> IO (CArray i e)@@ -72,38 +86,9 @@ CArray.rangeSize (k0,k1)) -cint :: Int -> FortranIO r (Ptr C.CInt)-cint = ContT . Marshal.with . fromIntegral- range :: (Int,Int) -> FortranIO r (Ptr C.CInt)-range = cint . CArray.rangeSize--alloca :: (Storable a) => FortranIO r (Ptr a)-alloca = ContT Alloc.alloca--allocaArray :: (Storable a) => Int -> FortranIO r (Ptr a)-allocaArray = ContT . Array.allocaArray--bool :: Bool -> FortranIO r (Ptr Bool)-bool = ContT . Marshal.with--char :: Char -> FortranIO r (Ptr C.CChar)-char = ContT . Marshal.with . CStr.castCharToCChar--string :: String -> FortranIO r (Ptr C.CChar)-string = ContT . CStr.withCString--float :: Float -> FortranIO r (Ptr Float)-float = ContT . Marshal.with--double :: Double -> FortranIO r (Ptr Double)-double = ContT . Marshal.with--complexFloat :: Complex Float -> FortranIO r (Ptr (Complex Float))-complexFloat = ContT . Marshal.with+range = Util.cint . CArray.rangeSize -complexDouble :: Complex Double -> FortranIO r (Ptr (Complex Double))-complexDouble = ContT . Marshal.with array :: (Storable a) => CArray i a -> FortranIO r (Ptr a)