tools: fancy .ghci for hledger-web
Some configuration for running hledger-web in ghci, and misc. utilities including hlint/hoogle/hayoo and a not-yet-working yesod devel-like reloader from a recent reddit thread. (If enabling these, also uncomment the required libs in hledger-web.cabal). Although it's not yet automated, we can now test hledger-web changes without relinking: >>> :serve Starting web app on port 3000 with base url http://localhost:3000 Press ctrl-c to quit C-c C-cInterrupted. >>> :r Ok, modules loaded: Settings, Main, Hledger.Web.Main, Application, Hledger.Web.Options, Settings.Development, Import, Handler.RootR, Handler.JournalR, Handler.RegisterR, Handler.SidebarR, Handler.Common, Handler.Utils, Foundation, Settings.StaticFiles, Handler.Post. >>> :serve Starting web app on port 3000 with base url http://localhost:3000
This commit is contained in:
		
							parent
							
								
									e13dd554a1
								
							
						
					
					
						commit
						7d984fb2e4
					
				| @ -1,2 +1,68 @@ | |||||||
| :set -i.:config:dist/build/autogen | -- -*- haskell -*- | ||||||
| :set -XCPP -XTemplateHaskell -XQuasiQuotes -XTypeFamilies -XFlexibleContexts -XGADTs -XOverloadedStrings -XMultiParamTypeClasses -XGeneralizedNewtypeDeriving -XEmptyDataDecls | -- .ghci for hledger-web | ||||||
|  | 
 | ||||||
|  | -- yesod | ||||||
|  | 
 | ||||||
|  | :set -i.:config:dist/build/autogen:app | ||||||
|  | :set -XCPP -XTemplateHaskell -XQuasiQuotes -XTypeFamilies -XFlexibleContexts -XGADTs -XOverloadedStrings -XMultiParamTypeClasses -XGeneralizedNewtypeDeriving -XEmptyDataDecls -XDeriveDataTypeable | ||||||
|  | import Prelude | ||||||
|  | 
 | ||||||
|  | -- hledger-web | ||||||
|  | 
 | ||||||
|  | :def serve const . return $ ":main --server --port 3000 -f t.j" | ||||||
|  | 
 | ||||||
|  | -- misc | ||||||
|  | 
 | ||||||
|  | import Control.Applicative | ||||||
|  | import Data.Char | ||||||
|  | import Data.List | ||||||
|  | import qualified Data.Text as T | ||||||
|  | import Data.Text (Text) | ||||||
|  | 
 | ||||||
|  | :set prompt "λ " | ||||||
|  | :def hlint  \s -> return $ ":! hlint \"" ++ s ++ "\"" | ||||||
|  | :def hoogle \s -> return $ ":! hoogle --count=15 \"" ++ s ++ "\"" | ||||||
|  | :def doc    \s -> return $ ":! hoogle --info \"" ++ s ++ "\"" | ||||||
|  | :def pl     \s -> return $ ":! pointfree \"" ++ s ++ "\"" | ||||||
|  | 
 | ||||||
|  | -- extra | ||||||
|  | 
 | ||||||
|  | -- -- hayoo search (requires hsdev, mtl) | ||||||
|  | -- -- λ :hayoo (a -> c) -> (b -> c) | ||||||
|  | -- -- either :: (a -> c) -> (b -> c) -> Either a b -> c | ||||||
|  | -- --     Case analysis for the Either type. | ||||||
|  | -- --      If the value is Left a, apply the first function to a; | ||||||
|  | -- --      if it is Right b, apply the second function to b. | ||||||
|  | -- --     -- Defined in 'Prelude', base | ||||||
|  | -- import Control.Monad.Error | ||||||
|  | -- import HsDev.Tools.Hayoo | ||||||
|  | -- :{ | ||||||
|  | -- let | ||||||
|  | --     showHayooFunction f = | ||||||
|  | --         (hayooName f ++ " :: " ++ hayooSignature f) : | ||||||
|  | --         (map ('\t':) $ | ||||||
|  | --             lines (untagDescription (hayooDescription f)) ++ | ||||||
|  | --             ["-- Defined in '" ++ hayooModule f ++ "', " ++ hayooPackage f]) | ||||||
|  | --     showHayoo = concatMap showHayooFunction . hayooFunctions | ||||||
|  | -- :} | ||||||
|  | -- :def hayoo \s -> return $ "runErrorT (hayoo \"" ++ s ++ "\") >>= (mapM_ putStrLn) . either (return . (\"Error: \" ++)) showHayoo" | ||||||
|  | 
 | ||||||
|  | -- -- watch for changes and restart, like yesod devel in interpreted mode (requires fsnotify) | ||||||
|  | -- -- from https://gist.github.com/rehno-lindeque/10490026 | ||||||
|  | -- import System.FSNotify | ||||||
|  | -- import Data.String | ||||||
|  | -- import Control.Concurrent.MVar | ||||||
|  | -- import Control.Concurrent | ||||||
|  | -- :{ | ||||||
|  | -- :def serveAndReload const (withManager (\manager ->  | ||||||
|  | --      do putStrLn "Listening to changes, press any key to stop..." | ||||||
|  | --         lock <- newEmptyMVar | ||||||
|  | --         watchTree manager (fromString ".") (const True) (const $ putMVar lock True) | ||||||
|  | --         forkIO (getLine >> putMVar lock False) | ||||||
|  | --         rerun <- readMVar lock | ||||||
|  | --         return $ if rerun  | ||||||
|  | --           then ":reload \n :main Development\n :serveAndReload" | ||||||
|  | --           else "" | ||||||
|  | --      )) | ||||||
|  | -- :} | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -165,6 +165,10 @@ library | |||||||
|                    , yesod-core |                    , yesod-core | ||||||
|                    , yesod-static |                    , yesod-static | ||||||
|                    , json |                    , json | ||||||
|  |                    -- required by extra ghci utilities: | ||||||
|  |                    -- , fsnotify | ||||||
|  |                    -- , hsdev | ||||||
|  |                    -- , mtl | ||||||
| 
 | 
 | ||||||
|     if flag(blaze_html_0_4) |     if flag(blaze_html_0_4) | ||||||
|       cpp-options:   -DBLAZE_HTML_0_4 |       cpp-options:   -DBLAZE_HTML_0_4 | ||||||
| @ -258,6 +262,10 @@ executable         hledger-web | |||||||
|                    , yesod-core |                    , yesod-core | ||||||
|                    , yesod-static |                    , yesod-static | ||||||
|                    , json |                    , json | ||||||
|  |                    -- required by extra ghci utilities: | ||||||
|  |                    -- , fsnotify | ||||||
|  |                    -- , hsdev | ||||||
|  |                    -- , mtl | ||||||
| 
 | 
 | ||||||
|     if flag(blaze_html_0_4) |     if flag(blaze_html_0_4) | ||||||
|       cpp-options:   -DBLAZE_HTML_0_4 |       cpp-options:   -DBLAZE_HTML_0_4 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user