readBuildPlan :: FilePath -> IO BuildPlan
readBuildPlan fp = do
    str <- System.IO.UTF8.readFile fp
    case fromString str of
        Left s -> error $ "Could not read build plan: " ++ s
        Right (x, "") -> return x
        Right (_, _:_) -> error "Trailing content when reading build plan"
readBuildPlan :: FilePath -> IO BuildPlan
readBuildPlan fp = do
    str <- System.IO.UTF8.readFile fp
    case fromString str of
        Left s -> error $ "Could not read build plan: " ++ s
        Right (x, "") -> return x
        Right (_, _:_) -> error "Trailing content when reading build plan"
readBuildPlan fp = do
    str <- System.IO.UTF8.readFile fp
    case fromString str of
        Left s -> error $ "Could not read build plan: " ++ s
        Right (x, "") -> return x
        Right (_, _:_) -> error "Trailing content when reading build plan"