1{-# LANGUAGE OverloadedStrings #-}
9import Control.Applicative as X
10import Control.Exception as X (evaluate)
11import Control.Monad as X
12import Control.Monad.Catch as X
13import Control.Monad.Reader as X
15import Data.Aeson.TH as X
16import Data.Aeson.Types as X (parseEither)
18import Data.List.NonEmpty as X (NonEmpty(..))
19import Data.Monoid as X
20import Data.Ord as X (comparing)
22import Data.Text as X (Text)
23import Data.Time.Calendar as X (Day(..), fromGregorian)
24import Data.Time.Clock as X
25import Data.Typeable as X
26import Database.Bloodhound as X hiding (key)
28import Lens.Micro.Aeson as X
29import Network.HTTP.Client as X hiding (Proxy, fileSize)
30import System.IO.Temp as X
31import System.PosixCompat.Files as X
33import Test.Hspec.QuickCheck as X (prop)
34import Test.QuickCheck as X hiding (Result, Success, isSuccess)
35import Test.QuickCheck.Property.Monoid as X (T (..), eq, prop_Monoid)
36import Text.Pretty.Simple as X (pPrint)
38import qualified Data.List as L
40noDuplicates :: Eq a => [a] -> Bool
41noDuplicates xs = L.nub xs == xs
43getSource :: EsResult a -> Maybe a
44getSource = fmap _source . foundResult
46grabFirst :: Either EsError (SearchResult a) -> Either EsError a
48 case fmap (hitSource . head . hits . searchHits) r of
50 (Right Nothing) -> Left (EsError 500 "Source was missing")
51 (Right (Just x)) -> Right x
53when' :: Monad m => m Bool -> m () -> m ()
54when' b f = b >>= \x -> when x f
56headMay :: [a] -> Maybe a
57headMay (x : _) = Just x
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