@@ -11,6 +11,7 @@ import qualified Data.Set as Set
1111import Distribution.Text (display, simpleParse)
1212import Stackage.Types
1313import qualified System.IO.UTF8
14+import Data.Char (isSpace)
1415
1516readBuildPlan :: FilePath -> IO BuildPlan
1617readBuildPlan fp = do
@@ -31,7 +32,7 @@ instance AsString BuildPlan where
3132 toString BuildPlan {..} = concat
3233 [ makeSection "tools" bpTools
3334 , makeSection "packages" $ Map.toList bpPackages
34− , makeSection "core" $ Set.toList bpCore
35+ , makeSection "core" $ Map.toList bpCore
3536 , makeSection "optional-core" $ Map.toList bpOptionalCore
3637 , makeSection "skipped-tests" $ Set.toList bpSkippedTests
3738 ]
@@ -44,7 +45,7 @@ instance AsString BuildPlan where
4445 let bp = BuildPlan
4546 { bpTools = tools
4647 , bpPackages = Map.fromList packages
47− , bpCore = Set.fromList core
48+ , bpCore = Map.fromList core
4849 , bpOptionalCore = Map.fromList optionalCore
4950 , bpSkippedTests = Set.fromList skipped
5051 }
@@ -64,6 +65,15 @@ instance AsString PackageName where
6465 toString (PackageName pn) = pn
6566 fromString s = Right (PackageName s, "")
6667
68+instance AsString (Maybe Version) where
69+ toString Nothing = ""
70+ toString (Just x) = toString x
71+ fromString s
72+ | all isSpace s = return (Nothing, s)
73+ | otherwise = do
74+ (v, s') <- fromString s
75+ return (Just v, s')
76+
6777instance AsString a => AsString (PackageName, a) where
6878 toString (PackageName pn, s) = concat [pn, " ", toString s]
6979 fromString s = do