Skip to content

Commit a0c30b7

Browse files
committed
Workaround commercialhaskell#2491 at all call sites
1 parent 0b35c49 commit a0c30b7

6 files changed

Lines changed: 28 additions & 4 deletions

File tree

src/Data/Yaml/Extra.hs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-- | Wrappers for Yaml functions to workaround
2+
-- https://github.com/commercialhaskell/stack/issues/2491.
3+
-- Import Data.Yaml.Extra in place of Data.Yaml to use this workaround.
4+
-- Beware these functions construct/deconstruct the entire file at once!
5+
module Data.Yaml.Extra (decodeFileEither, encodeFile, module Data.Yaml) where
6+
7+
import Data.Yaml hiding (decodeFileEither, encodeFile)
8+
import qualified Data.ByteString as B
9+
import System.IO
10+
11+
-- Note: we refrain from using 'B.readFile' and 'B.writeFile', as they open
12+
-- the file in binary mode rather than text mode.
13+
decodeFileEither :: FromJSON a => FilePath -> IO (Either ParseException a)
14+
decodeFileEither path = withFile path ReadMode $
15+
\hnd -> do
16+
fileContent <- B.hGetContents hnd
17+
return $ decodeEither' fileContent
18+
19+
encodeFile :: ToJSON a => FilePath -> a -> IO ()
20+
encodeFile path v = withFile path WriteMode $
21+
\hnd -> do
22+
let fileContent = encode v
23+
B.hPut hnd fileContent

src/Stack/BuildPlan.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ import qualified Data.Text as T
6666
import Data.Text.Encoding (encodeUtf8)
6767
import qualified Data.Traversable as Tr
6868
import Data.Typeable (Typeable)
69-
import Data.Yaml (decodeEither', decodeFileEither)
69+
import Data.Yaml.Extra (decodeEither', decodeFileEither)
7070
import qualified Distribution.Package as C
7171
import Distribution.PackageDescription (GenericPackageDescription,
7272
flagDefault, flagManual,

src/Stack/Config.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ import Data.Monoid.Extra
6363
import qualified Data.Text as T
6464
import Data.Text.Encoding (encodeUtf8, decodeUtf8, decodeUtf8With)
6565
import Data.Text.Encoding.Error (lenientDecode)
66-
import qualified Data.Yaml as Yaml
66+
import qualified Data.Yaml.Extra as Yaml
6767
import Distribution.System (OS (..), Platform (..), buildPlatform)
6868
import qualified Distribution.Text
6969
import Distribution.Version (simplifyVersionRange)

src/Stack/ConfigCmd.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import Control.Monad.Reader (MonadReader, asks)
1717
import Control.Monad.Trans.Control (MonadBaseControl)
1818
import qualified Data.ByteString as S
1919
import qualified Data.HashMap.Strict as HMap
20-
import qualified Data.Yaml as Yaml
20+
import qualified Data.Yaml.Extra as Yaml
2121
import Network.HTTP.Client.Conduit (HasHttpManager)
2222
import Path
2323
import Stack.BuildPlan

src/Stack/Solver.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import Data.Text.Encoding.Error (lenientDecode)
5353
import qualified Data.Text.Lazy as LT
5454
import Data.Text.Lazy.Encoding (decodeUtf8With)
5555
import Data.Tuple (swap)
56-
import qualified Data.Yaml as Yaml
56+
import qualified Data.Yaml.Extra as Yaml
5757
import qualified Distribution.Package as C
5858
import qualified Distribution.PackageDescription as C
5959
import qualified Distribution.Text as C

stack.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ library
6666
Data.Maybe.Extra
6767
Data.Monoid.Extra
6868
Data.Store.VersionTagged
69+
Data.Yaml.Extra
6970
Distribution.Version.Extra
7071
Network.HTTP.Download
7172
Network.HTTP.Download.Verified

0 commit comments

Comments
 (0)