@@ -240,6 +240,7 @@ read path =
240240
241241 Right project@(Pkg (PkgInfo _ _ _ _ _ deps tests _)) ->
242242 do checkOverlap "dependencies" "test-dependencies" deps tests
243+ pkgHasCore deps
243244 return project
244245
245246 Right project@(App (AppInfo _ srcDirs deps tests trans)) ->
@@ -247,6 +248,7 @@ read path =
247248 checkOverlap "dependencies" "transitive-dependencies" deps trans
248249 checkOverlap "test-dependencies" "transitive-dependencies" tests trans
249250 mapM_ doesDirectoryExist srcDirs
251+ appHasCoreAndJson (Map.union deps trans)
250252 return project
251253
252254
@@ -273,6 +275,25 @@ doesDirectoryExist dir =
273275 else throwBadJson (E.BadSrcDir dir)
274276
275277
278+appHasCoreAndJson :: Map Name a -> Task.Task ()
279+appHasCoreAndJson pkgs =
280+ if Map.member Pkg.core pkgs then
281+
282+ if Map.member Pkg.json pkgs
283+ then return ()
284+ else throwBadJson E.NoAppJson
285+
286+ else
287+ throwBadJson E.NoAppCore
288+
289+
290+pkgHasCore :: Map Name a -> Task.Task ()
291+pkgHasCore pkgs =
292+ if Map.member Pkg.core pkgs
293+ then return ()
294+ else throwBadJson E.NoPkgCore
295+
296+
276297
277298-- JSON DECODE
278299