Safe Haskell | None |
---|---|
Language | Haskell2010 |
Non-Futhark-specific utilities. If you find yourself writing general functions on generic data structures, consider putting them here.
Sometimes it is also preferable to copy a small function rather than introducing a large dependency. In this case, make sure to note where you got it from (and make sure that the license is compatible).
Synopsis
- mapAccumLM :: Monad m => (acc -> x -> m (acc, y)) -> acc -> [x] -> m (acc, [y])
- chunk :: Int -> [a] -> [[a]]
- chunks :: [Int] -> [a] -> [[a]]
- dropAt :: Int -> Int -> [a] -> [a]
- takeLast :: Int -> [a] -> [a]
- dropLast :: Int -> [a] -> [a]
- mapEither :: (a -> Either b c) -> [a] -> ([b], [c])
- maybeNth :: Integral int => int -> [a] -> Maybe a
- maybeHead :: [a] -> Maybe a
- splitFromEnd :: Int -> [a] -> ([a], [a])
- splitAt3 :: Int -> Int -> [a] -> ([a], [a], [a])
- splitAt4 :: Int -> Int -> Int -> [a] -> ([a], [a], [a], [a])
- focusNth :: Integral int => int -> [a] -> Maybe ([a], a, [a])
- unixEnvironment :: [(String, String)]
- isEnvVarSet :: String -> Bool -> Bool
- runProgramWithExitCode :: FilePath -> [String] -> String -> IO (Either IOException (ExitCode, String, String))
- directoryContents :: FilePath -> IO [FilePath]
- roundFloat :: Float -> Float
- roundDouble :: Double -> Double
- fromPOSIX :: FilePath -> FilePath
- toPOSIX :: FilePath -> FilePath
- trim :: String -> String
- pmapIO :: (a -> IO b) -> [a] -> IO [b]
- zEncodeString :: UserString -> EncodedString
Documentation
mapAccumLM :: Monad m => (acc -> x -> m (acc, y)) -> acc -> [x] -> m (acc, [y]) Source #
Like mapAccumL
, but monadic.
chunk :: Int -> [a] -> [[a]] Source #
chunk n a
splits a
into n
-size-chunks. If the length of
a
is not divisible by n
, the last chunk will have fewer than
n
elements (but it will never be empty).
chunks :: [Int] -> [a] -> [[a]] Source #
chunks ns a
splits a
into chunks determined by the elements
of ns
. It must hold that sum ns == length a
, or the resulting
list may contain too few chunks, or not all elements of a
.
mapEither :: (a -> Either b c) -> [a] -> ([b], [c]) Source #
A combination of map
and partitionEithers
.
maybeNth :: Integral int => int -> [a] -> Maybe a Source #
Return the list element at the given index, if the index is valid.
splitFromEnd :: Int -> [a] -> ([a], [a]) Source #
Like splitAt
, but from the end.
splitAt4 :: Int -> Int -> Int -> [a] -> ([a], [a], [a], [a]) Source #
Like splitAt
, but produces four lists.
focusNth :: Integral int => int -> [a] -> Maybe ([a], a, [a]) Source #
Return the list element at the given index, if the index is valid, along with the elements before and after.
unixEnvironment :: [(String, String)] Source #
The Unix environment when the Futhark compiler started.
runProgramWithExitCode :: FilePath -> [String] -> String -> IO (Either IOException (ExitCode, String, String)) Source #
Like readProcessWithExitCode
, but also wraps exceptions when
the indicated binary cannot be launched, or some other exception is
thrown.
directoryContents :: FilePath -> IO [FilePath] Source #
Every non-directory file contained in a directory tree.
roundFloat :: Float -> Float Source #
Round a single-precision floating point number correctly.
roundDouble :: Double -> Double Source #
Round a double-precision floating point number correctly.
fromPOSIX :: FilePath -> FilePath Source #
Some bad operating systems do not use forward slash as directory separator - this is where we convert Futhark includes (which always use forward slash) to native paths.
toPOSIX :: FilePath -> FilePath Source #
Turn a POSIX filepath into a filepath for the native system.
trim :: String -> String Source #
Remove leading and trailing whitespace from a string. Not an efficient implementation!
zEncodeString :: UserString -> EncodedString Source #