aztecs-asset 0.1.0.0 → 0.2.0.0
raw patch · 2 files changed
+17/−14 lines, 2 filesdep ~aztecsdep ~basedep ~containersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aztecs, base, containers
API changes (from Hackage documentation)
+ Data.Aztecs.Asset: type AssetConfig a;
+ Data.Aztecs.Asset: }
- Data.Aztecs.Asset: AssetServer :: Map AssetId a -> Map AssetId (IORef (Maybe a)) -> AssetId -> AssetServer a
+ Data.Aztecs.Asset: AssetServer :: !Map AssetId a -> !Map AssetId (IORef (Maybe a)) -> !AssetId -> AssetServer a
- Data.Aztecs.Asset: [assetServerAssets] :: AssetServer a -> Map AssetId a
+ Data.Aztecs.Asset: [assetServerAssets] :: AssetServer a -> !Map AssetId a
- Data.Aztecs.Asset: [loadingAssets] :: AssetServer a -> Map AssetId (IORef (Maybe a))
+ Data.Aztecs.Asset: [loadingAssets] :: AssetServer a -> !Map AssetId (IORef (Maybe a))
- Data.Aztecs.Asset: [nextAssetId] :: AssetServer a -> AssetId
+ Data.Aztecs.Asset: [nextAssetId] :: AssetServer a -> !AssetId
- Data.Aztecs.Asset: class Asset a
+ Data.Aztecs.Asset: class Asset a where {
- Data.Aztecs.Asset: load :: Asset a => FilePath -> AssetServer a -> IO (Handle a, AssetServer a)
+ Data.Aztecs.Asset: load :: Asset a => FilePath -> AssetConfig a -> AssetServer a -> IO (Handle a, AssetServer a)
- Data.Aztecs.Asset: loadAsset :: Asset a => FilePath -> IO a
+ Data.Aztecs.Asset: loadAsset :: Asset a => FilePath -> AssetConfig a -> IO a
Files
- aztecs-asset.cabal +4/−4
- src/Data/Aztecs/Asset.hs +13/−10
aztecs-asset.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: aztecs-asset-version: 0.1.0.0+version: 0.2.0.0 license: BSD-3-Clause license-file: LICENSE maintainer: matt@hunzinger.me@@ -26,8 +26,8 @@ default-language: Haskell2010 ghc-options: -Wall build-depends:- base >=4 && <5,- aztecs >= 0.3,- containers >=0.7,+ base >=4.6 && <5,+ aztecs >= 0.5,+ containers >=0.6, mtl >=2, linear >= 1
src/Data/Aztecs/Asset.hs view
@@ -3,6 +3,7 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-} module Data.Aztecs.Asset where @@ -15,16 +16,16 @@ import Data.Data (Typeable) import Data.Foldable (foldrM) import Data.IORef (IORef, newIORef, readIORef, writeIORef)-import Data.Map (Map)-import qualified Data.Map as Map+import Data.Map.Strict (Map)+import qualified Data.Map.Strict as Map newtype AssetId = AssetId {unAssetId :: Int} deriving (Eq, Ord, Show) data AssetServer a = AssetServer- { assetServerAssets :: Map AssetId a,- loadingAssets :: Map AssetId (IORef (Maybe a)),- nextAssetId :: AssetId+ { assetServerAssets :: !(Map AssetId a),+ loadingAssets :: !(Map AssetId (IORef (Maybe a))),+ nextAssetId :: !AssetId } instance (Typeable a) => Component (AssetServer a)@@ -38,17 +39,19 @@ } class Asset a where- loadAsset :: FilePath -> IO a+ type AssetConfig a + loadAsset :: FilePath -> AssetConfig a -> IO a+ newtype Handle a = Handle {handleId :: AssetId} deriving (Eq, Ord, Show) -load :: (Asset a) => FilePath -> AssetServer a -> IO (Handle a, AssetServer a)-load path server = do+load :: (Asset a) => FilePath -> AssetConfig a -> AssetServer a -> IO (Handle a, AssetServer a)+load path cfg server = do let assetId = nextAssetId server v <- newIORef Nothing _ <- forkIO $ do- a <- loadAsset path+ a <- loadAsset path cfg writeIORef v (Just a) return ( Handle assetId,@@ -65,7 +68,7 @@ loadAssets = S.map_ ( Q.fetch @_ @(AssetServer a)- >>> Q.run+ >>> Q.task ( \server -> foldrM ( \(aId, v) acc -> do