diff --git a/ethereum-analyzer-webui.cabal b/ethereum-analyzer-webui.cabal
--- a/ethereum-analyzer-webui.cabal
+++ b/ethereum-analyzer-webui.cabal
@@ -1,5 +1,5 @@
 name:                ethereum-analyzer-webui
-version:             1.3.0
+version:             2.0.0
 synopsis:            A web frontend for ethereum-analyzer
 homepage:            https://github.com/ethereumK/ethereum-analyzer
 license:             Apache-2.0
@@ -21,7 +21,7 @@
 source-repository this
   type:     git
   location: https://github.com/zchn/ethereum-analyzer
-  tag:      v1.3.0
+  tag:      v2.0.0
   subdir:   ethereum-analyzer-webui
 
 library
diff --git a/src/Ethereum/Analyzer/Web/API.hs b/src/Ethereum/Analyzer/Web/API.hs
--- a/src/Ethereum/Analyzer/Web/API.hs
+++ b/src/Ethereum/Analyzer/Web/API.hs
@@ -26,7 +26,7 @@
 import Ethereum.Analyzer.Web.API.Internal (HTML)
 
 -- | ethereum-analyzer API definition.
-type API = Get '[HTML] RootPage :<|> "users" :> Get '[JSON] Users :<|> "ea" :> "dotcfg" :> QueryParam "code" Text :> Get '[JSON] DotCfgResp :<|> "ea" :> "dotcfg2" :> QueryParam "code" Text :> Get '[JSON] DotCfgResp
+type API = Get '[ HTML] RootPage :<|> "users" :> Get '[ JSON] Users :<|> "ea" :> "dotcfg" :> QueryParam "code" Text :> Get '[ JSON] DotCfgResp :<|> "ea" :> "dotcfg2" :> QueryParam "code" Text :> Get '[ JSON] DotCfgResp
 
 -- | Value-level representation of API.
 apiraw :: Proxy (API :<|> "web" :> Raw)
diff --git a/src/Ethereum/Analyzer/Web/Server.hs b/src/Ethereum/Analyzer/Web/Server.hs
--- a/src/Ethereum/Analyzer/Web/Server.hs
+++ b/src/Ethereum/Analyzer/Web/Server.hs
@@ -9,7 +9,7 @@
   , startApp
   ) where
 
-import Protolude
+import Protolude hiding (show)
 
 import Control.Monad.Log (Severity(..))
 import qualified Data.List as List
@@ -63,7 +63,8 @@
            [long "access-logs", help "How to log HTTP access", value Disabled]) <*>
       option
         (eitherReader
-           (maybe (throwError (toS invalidLogLevel)) pure . Log.fromKeyword . toS))
+           (maybe (throwError (toS invalidLogLevel)) pure .
+            Log.fromKeyword . toS))
         (fold
            [ long "log-level"
            , help "Minimum severity for log messages"
@@ -87,15 +88,15 @@
 runApp :: Config -> IO ()
 runApp config@Config {..} = do
   requests <- Prom.registerIO requestDuration
-  when enableGhcMetrics $
-    do statsEnabled <- getGCStatsEnabled
-       unless statsEnabled $
-         Log.withLogging logLevel $
-         Log.log
-           Warning
-           (text
-              "Exporting GHC metrics but GC stats not enabled. Re-run with +RTS -T.")
-       void $ Prom.register Prom.ghcMetrics
+  when enableGhcMetrics $ do
+    statsEnabled <- getGCStatsEnabled
+    unless statsEnabled $
+      Log.withLogging logLevel $
+      Log.log
+        Warning
+        (text
+           "Exporting GHC metrics but GC stats not enabled. Re-run with +RTS -T.")
+    void $ Prom.register Prom.ghcMetrics
   runSettings settings (middleware requests)
   where
     settings = warpSettings config
diff --git a/src/Ethereum/Analyzer/Web/Server/Handlers.hs b/src/Ethereum/Analyzer/Web/Server/Handlers.hs
--- a/src/Ethereum/Analyzer/Web/Server/Handlers.hs
+++ b/src/Ethereum/Analyzer/Web/Server/Handlers.hs
@@ -9,13 +9,13 @@
 
 import Protolude
 
+import Control.Monad.Except (ExceptT(..))
+import Control.Monad.Log (Severity, logInfo)
 import Ethereum.Analyzer.Disasm
 import Ethereum.Analyzer.Util
 import Ethereum.Analyzer.Web.API
        (API, RootPage(..), User(..), Users(..), DotCfgResp(..))
 import qualified Ethereum.Analyzer.Web.Server.Logging as Log
-import Control.Monad.Except (ExceptT(..))
-import Control.Monad.Log (Severity, logInfo)
 import Servant
        (ServantErr, Server, (:<|>)(..), (:>), (:~>)(..), enter, Raw)
 import Servant.Utils.StaticFiles (serveDirectory)
diff --git a/src/Ethereum/Analyzer/Web/Server/Instrument.hs b/src/Ethereum/Analyzer/Web/Server/Instrument.hs
--- a/src/Ethereum/Analyzer/Web/Server/Instrument.hs
+++ b/src/Ethereum/Analyzer/Web/Server/Instrument.hs
@@ -46,7 +46,8 @@
 
 requestDuration :: IO RequestDuration
 requestDuration =
-  Prom.vector ("handler", "method", "status_code") $ Prom.summary info Prom.defaultQuantiles
+  Prom.vector ("handler", "method", "status_code") $
+  Prom.summary info Prom.defaultQuantiles
   where
     info =
       Prom.Info
@@ -84,7 +85,8 @@
   -> Text -- ^ The label used to identify the app
   -> Wai.Middleware
 prometheus PrometheusSettings {..} duration appName app req respond =
-  if Wai.requestMethod req == HTTP.methodGet && Wai.pathInfo req == prometheusEndPoint
+  if Wai.requestMethod req == HTTP.methodGet &&
+     Wai.pathInfo req == prometheusEndPoint
     then case prometheusHandlerName of
            Nothing -> respondWithMetrics respond
            Just name ->
@@ -96,7 +98,8 @@
 metrics :: Wai.Application
 metrics = const respondWithMetrics
 
-respondWithMetrics :: (Wai.Response -> IO Wai.ResponseReceived) -> IO Wai.ResponseReceived
+respondWithMetrics :: (Wai.Response -> IO Wai.ResponseReceived)
+                   -> IO Wai.ResponseReceived
 respondWithMetrics respond = do
   content <- Prom.exportMetricsAsText
   respond $ Wai.responseBuilder HTTP.status200 headers $ byteString content
diff --git a/src/Ethereum/Analyzer/Web/Server/Logging.hs b/src/Ethereum/Analyzer/Web/Server/Logging.hs
--- a/src/Ethereum/Analyzer/Web/Server/Logging.hs
+++ b/src/Ethereum/Analyzer/Web/Server/Logging.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE NoImplicitPrelude, OverloadedStrings, RecordWildCards,
-  FlexibleContexts #-}
+{-# LANGUAGE NoImplicitPrelude, OverloadedStrings, FlexibleContexts
+  #-}
 
 -- | Logging helpers for ethereum-analyzer.
 module Ethereum.Analyzer.Web.Server.Logging
@@ -29,11 +29,10 @@
   :: (MonadMask m, MonadIO m, Pretty msg)
   => Severity -> LogM msg m a -> m a
 withLogging severityThreshold body =
-  withFDHandler defaultBatchingOptions stdout 0.4 80 $
-  \stdoutHandler ->
-     runLoggingT
-       (withTimestamps body)
-       (printLogs severityThreshold stdoutHandler)
+  withFDHandler defaultBatchingOptions stdout 0.4 80 $ \stdoutHandler ->
+    runLoggingT
+      (withTimestamps body)
+      (printLogs severityThreshold stdoutHandler)
 
 withTimestamps
   :: (MonadIO m, MonadLog (WithTimestamp msg) m)
@@ -72,7 +71,8 @@
   => Severity -> Handler m Doc -> WithTimestamp (WithSeverity a) -> m ()
 printLogs severityThreshold handler message =
   when (severityThreshold >= msgSeverity (discardTimestamp message)) $
-  handler . renderWithTimestamp timeFormatter (renderWithSeverity pretty) $ message
+  handler . renderWithTimestamp timeFormatter (renderWithSeverity pretty) $
+  message
   where
     timeFormatter = formatTime defaultTimeLocale timeFormat
     timeFormat = iso8601DateFormat (Just "%H:%M:%S.%q")
@@ -81,4 +81,4 @@
 log
   :: MonadLog (WithSeverity a) m
   => Severity -> a -> m ()
-log severity msg = logMessage (WithSeverity severity msg)
+log severity msg' = logMessage (WithSeverity severity msg')
