1module Stackage.HaskellPlatform
5import Control.Monad (guard)
6import Data.Char (isSpace)
7import Data.List (foldl', isInfixOf, isPrefixOf, stripPrefix)
8import Data.Maybe (mapMaybe)
9import Data.Monoid (Monoid (..))
10import Data.Set (singleton)
11import Distribution.Text (simpleParse)
13import System.Directory (doesFileExist)
14import System.FilePath ((</>))
16loadHaskellPlatform :: SelectSettings -> IO (Maybe HaskellPlatform)
17loadHaskellPlatform ss = do
20 then fmap (Just . parseHP) $ readFile fp
22 putStrLn "Warning: No Haskell Platform found for current GHC version"
25 GhcMajorVersion x y = selectGhcVersion ss
27 fp = haskellPlatformDir ss </> (concat
35data HPLine = HPLPackage PackageIdentifier
42toHPLine :: String -> Maybe HPLine
44 | "begin core packages" `isInfixOf` s = Just HPLBeginCore
45 | "end core packages" `isInfixOf` s = Just HPLEndCore
46 | "begin platform packages" `isInfixOf` s = Just HPLBeginPlatform
47 | "end platform packages" `isInfixOf` s = Just HPLEndPlatform
49 let s1 = dropWhile isSpace s
50 guard $ not $ "--" `isPrefixOf` s1
52 guard $ "==" `isInfixOf` s1
53 let (package', s2) = break (== '=') s1
54 package = takeWhile (not . isSpace) package'
55 s3 <- stripPrefix "==" s2
56 version <- simpleParse $ takeWhile (/= ',') s3
57 Just $ HPLPackage $ PackageIdentifier (PackageName package) version
59parseHP :: String -> HaskellPlatform
61 snd . foldl' addLine (notInBlock, mempty) . mapMaybe toHPLine . lines
64 inCore x = HaskellPlatform (singleton x) mempty
65 inPlatform x = HaskellPlatform mempty (singleton x)
67 addLine (fromPackage, hp) (HPLPackage vp) = (fromPackage, fromPackage vp `mappend` hp)
68 addLine (_, hp) HPLBeginCore = (inCore, hp)
69 addLine (_, hp) HPLEndCore = (notInBlock, hp)
70 addLine (_, hp) HPLBeginPlatform = (inPlatform, hp)
71 addLine (_, hp) HPLEndPlatform = (notInBlock, hp)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list