Skip to content

Commit

Permalink
Cleaned up redundant constraints and unused imports
Browse files Browse the repository at this point in the history
  • Loading branch information
mpscholten committed Oct 10, 2021
1 parent eb57fac commit 5338630
Show file tree
Hide file tree
Showing 54 changed files with 74 additions and 151 deletions.
2 changes: 1 addition & 1 deletion IHP/AuthSupport/Controller/Sessions.hs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ newSessionAction = do
-- After 10 failed attempts, the user is locked for an hours. See 'maxFailedLoginAttemps' to customize this.
--
-- After a successful login, the user is redirect to 'afterLoginRedirectPath'.
createSessionAction :: forall record action passwordField.
createSessionAction :: forall record action.
(?theAction :: action
, ?context :: ControllerContext
, ?modelContext :: ModelContext
Expand Down
1 change: 0 additions & 1 deletion IHP/AutoRefresh.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import qualified Data.Binary.Builder as ByteString
import qualified Data.Set as Set
import IHP.ModelSupport
import qualified Control.Exception as Exception
import Control.Concurrent.Async
import qualified Control.Concurrent.MVar as MVar
import qualified Data.Maybe as Maybe
import qualified Data.Text as Text
Expand Down
1 change: 0 additions & 1 deletion IHP/AutoRefresh/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ module IHP.AutoRefresh.Types where
import IHP.Prelude
import IHP.Controller.RequestContext
import Control.Concurrent.MVar (MVar)
import Control.Concurrent.Async

data AutoRefreshState = AutoRefreshDisabled | AutoRefreshEnabled { sessionId :: !UUID }
data AutoRefreshSession = AutoRefreshSession
Expand Down
4 changes: 2 additions & 2 deletions IHP/Controller/FileUpload.hs
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ data ImageUploadOptions = ImageUploadOptions {
-- > redirectTo EditUserAction { .. }
--
-- The uploaded image path is now stored in #pictureUrl.
uploadImageWithOptions :: forall (fieldName :: Symbol) context record (tableName :: Symbol). (
uploadImageWithOptions :: forall (fieldName :: Symbol) record (tableName :: Symbol). (
?context :: ControllerContext
, SetField fieldName record (Maybe Text)
, KnownSymbol fieldName
Expand Down Expand Up @@ -193,7 +193,7 @@ uploadImageWithOptions options _ user =
-- > user <- user |> updateRecord
-- > redirectTo EditUserAction { .. }
--
uploadImageFile :: forall (fieldName :: Symbol) context record (tableName :: Symbol). (
uploadImageFile :: forall (fieldName :: Symbol) record (tableName :: Symbol). (
?context :: ControllerContext
, SetField fieldName record (Maybe Text)
, KnownSymbol fieldName
Expand Down
2 changes: 1 addition & 1 deletion IHP/Controller/Param.hs
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,7 @@ ifValid branch model = branch ((if null annotations then Right else Left) model)
meta :: ModelSupport.MetaBag
meta = getField @"meta" model

ifNew :: forall record id. (?context :: ControllerContext, ?modelContext :: ModelSupport.ModelContext, HasField "meta" record MetaBag) => (record -> record) -> record -> record
ifNew :: forall record. (?context :: ControllerContext, ?modelContext :: ModelSupport.ModelContext, HasField "meta" record MetaBag) => (record -> record) -> record -> record
ifNew thenBlock record = if ModelSupport.isNew record then thenBlock record else record


Expand Down
8 changes: 4 additions & 4 deletions IHP/Controller/Render.hs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ respondSvg :: (?context :: ControllerContext) => Html -> IO ()
respondSvg html = respondAndExit $ responseBuilder status200 [(hContentType, "image/svg+xml"), (hConnection, "keep-alive")] (Blaze.renderHtmlBuilder html)
{-# INLINABLE respondSvg #-}

renderHtml :: forall viewContext view controller. (ViewSupport.View view, ?context :: ControllerContext, ?modelContext :: ModelContext) => view -> IO Html
renderHtml :: forall view. (ViewSupport.View view, ?context :: ControllerContext) => view -> IO Html
renderHtml !view = do
let ?view = view
initFlashMessages
Expand All @@ -68,7 +68,7 @@ renderHtml !view = do
pure boundHtml
{-# INLINABLE renderHtml #-}

renderFile :: (?context :: ControllerContext, ?modelContext :: ModelContext) => String -> ByteString -> IO ()
renderFile :: (?context :: ControllerContext) => String -> ByteString -> IO ()
renderFile filePath contentType = respondAndExit $ responseFile status200 [(hContentType, contentType)] filePath Nothing
{-# INLINABLE renderFile #-}

Expand Down Expand Up @@ -111,7 +111,7 @@ data PolymorphicRender
-- `
-- This will render `Hello World` for normal browser requests and `true` when requested via an ajax request
{-# INLINABLE renderPolymorphic #-}
renderPolymorphic :: forall viewContext jsonType htmlType. (?context :: ControllerContext) => PolymorphicRender -> IO ()
renderPolymorphic :: (?context :: ControllerContext) => PolymorphicRender -> IO ()
renderPolymorphic PolymorphicRender { html, json } = do
let headers = Network.Wai.requestHeaders request
let acceptHeader = snd (fromMaybe (hAccept, "text/html") (List.find (\(headerName, _) -> headerName == hAccept) headers)) :: ByteString
Expand All @@ -132,7 +132,7 @@ polymorphicRender = PolymorphicRender Nothing Nothing


{-# INLINABLE render #-}
render :: forall view controller. (ViewSupport.View view, ?context :: ControllerContext, ?modelContext :: ModelContext) => view -> IO ()
render :: forall view. (ViewSupport.View view, ?context :: ControllerContext) => view -> IO ()
render !view = do
renderPolymorphic PolymorphicRender
{ html = Just $ (renderHtml view) >>= respondHtml
Expand Down
2 changes: 1 addition & 1 deletion IHP/ControllerPrelude.hs
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,4 @@ import IHP.FileStorage.Preprocessor.ImageMagick

import IHP.Pagination.ControllerFunctions
import IHP.HSX.QQ (hsx)
import IHP.HSX.ToHtml
import IHP.HSX.ToHtml ()
2 changes: 0 additions & 2 deletions IHP/DataSync/ChangeNotifications.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,10 @@ import IHP.Prelude
import qualified Database.PostgreSQL.Simple as PG
import qualified Database.PostgreSQL.Simple.Types as PG
import qualified Database.PostgreSQL.Simple.Notification as PG
import Control.Concurrent.Async
import IHP.ModelSupport
import Data.String.Interpolate.IsString (i)
import Data.Aeson
import Data.Aeson.TH
import qualified Data.Text as Text
import qualified Control.Concurrent.MVar as MVar
import IHP.DataSync.DynamicQuery (transformColumnNamesToFieldNames)
import qualified IHP.DataSync.RowLevelSecurity as RLS
Expand Down
4 changes: 0 additions & 4 deletions IHP/DataSync/Controller.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,9 @@ import qualified Data.Aeson as Aeson

import Data.Aeson.TH
import Data.Aeson
import qualified IHP.QueryBuilder as QueryBuilder
import qualified Database.PostgreSQL.Simple as PG
import qualified Database.PostgreSQL.Simple.FromField as PG
import qualified Database.PostgreSQL.Simple.FromRow as PG
import qualified Database.PostgreSQL.Simple.ToField as PG
import qualified Database.PostgreSQL.Simple.Types as PG
import qualified Database.PostgreSQL.Simple.Notification as PG
import qualified Data.HashMap.Strict as HashMap
import qualified Data.UUID.V4 as UUID
import qualified Control.Concurrent.MVar as MVar
Expand Down
3 changes: 1 addition & 2 deletions IHP/ErrorController.hs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ import qualified IHP.Environment as Environment
import IHP.Controller.Context
import qualified System.Directory as Directory
import IHP.ApplicationContext
import qualified System.Environment as Env

handleNoResponseReturned :: (Show controller, ?context :: ControllerContext) => controller -> IO ResponseReceived
handleNoResponseReturned controller = do
Expand Down Expand Up @@ -314,7 +313,7 @@ recordNotFoundExceptionHandlerDev exception controller additionalInfo =
-- Handler for 'IHP.ModelSupport.RecordNotFoundException'
--
-- Used only in production mode of the app. The exception is handled by calling 'handleNotFound'
recordNotFoundExceptionHandlerProd :: (Show controller, ?context :: ControllerContext) => SomeException -> controller -> Text -> Maybe (IO ResponseReceived)
recordNotFoundExceptionHandlerProd :: (?context :: ControllerContext) => SomeException -> controller -> Text -> Maybe (IO ResponseReceived)
recordNotFoundExceptionHandlerProd exception controller additionalInfo =
case fromException exception of
Just (exception@(ModelSupport.RecordNotFoundException {})) ->
Expand Down
38 changes: 19 additions & 19 deletions IHP/Fetch.hs
Original file line number Diff line number Diff line change
Expand Up @@ -36,84 +36,84 @@ import IHP.QueryBuilder

class Fetchable fetchable model | fetchable -> model where
type FetchResult fetchable model
fetch :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => fetchable -> IO (FetchResult fetchable model)
fetchOneOrNothing :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => fetchable -> IO (Maybe model)
fetchOne :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => fetchable -> IO model
fetch :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => fetchable -> IO (FetchResult fetchable model)
fetchOneOrNothing :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => fetchable -> IO (Maybe model)
fetchOne :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => fetchable -> IO model

-- The instance declaration had to be split up because a type variable ranging over HasQueryBuilder instances is not allowed in the declaration of the associated type. The common*-functions reduce the redundancy to the necessary minimum.
instance (model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (QueryBuilder table) model where
type instance FetchResult (QueryBuilder table) model = [model]
{-# INLINE fetch #-}
fetch :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => QueryBuilder table -> IO [model]
fetch :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => QueryBuilder table -> IO [model]
fetch = commonFetch

{-# INLINE fetchOneOrNothing #-}
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => QueryBuilder table -> IO (Maybe model)
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => QueryBuilder table -> IO (Maybe model)
fetchOneOrNothing = commonFetchOneOrNothing

{-# INLINE fetchOne #-}
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => QueryBuilder table -> IO model
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => QueryBuilder table -> IO model
fetchOne = commonFetchOne

instance (model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (JoinQueryBuilderWrapper r table) model where
type instance FetchResult (JoinQueryBuilderWrapper r table) model = [model]
{-# INLINE fetch #-}
fetch :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => JoinQueryBuilderWrapper r table -> IO [model]
fetch :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => JoinQueryBuilderWrapper r table -> IO [model]
fetch = commonFetch

{-# INLINE fetchOneOrNothing #-}
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => JoinQueryBuilderWrapper r table -> IO (Maybe model)
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => JoinQueryBuilderWrapper r table -> IO (Maybe model)
fetchOneOrNothing = commonFetchOneOrNothing

{-# INLINE fetchOne #-}
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => JoinQueryBuilderWrapper r table -> IO model
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => JoinQueryBuilderWrapper r table -> IO model
fetchOne = commonFetchOne

instance (model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (NoJoinQueryBuilderWrapper table) model where
type instance FetchResult (NoJoinQueryBuilderWrapper table) model = [model]
{-# INLINE fetch #-}
fetch :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => NoJoinQueryBuilderWrapper table -> IO [model]
fetch :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => NoJoinQueryBuilderWrapper table -> IO [model]
fetch = commonFetch

{-# INLINE fetchOneOrNothing #-}
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => NoJoinQueryBuilderWrapper table -> IO (Maybe model)
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => NoJoinQueryBuilderWrapper table -> IO (Maybe model)
fetchOneOrNothing = commonFetchOneOrNothing

{-# INLINE fetchOne #-}
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => NoJoinQueryBuilderWrapper table -> IO model
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => NoJoinQueryBuilderWrapper table -> IO model
fetchOne = commonFetchOne

instance (model ~ GetModelByTableName table, KnownSymbol table, FromField value, KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol columnName, HasField columnName foreignModel value, HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable columnName value) NoJoins) => Fetchable (LabeledQueryBuilderWrapper foreignTable columnName value table) model where
type instance FetchResult (LabeledQueryBuilderWrapper foreignTable columnName value table) model = [LabeledData value model]
-- fetch needs to return a list of labeled data. The
{-# INLINE fetch #-}
fetch :: (Table model, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => LabeledQueryBuilderWrapper foreignTable columnName value table -> IO [LabeledData value model]
fetch :: (Table model, PG.FromRow model, ?modelContext :: ModelContext) => LabeledQueryBuilderWrapper foreignTable columnName value table -> IO [LabeledData value model]
fetch !queryBuilderProvider = do
let !(theQuery, theParameters) = queryBuilderProvider
|> toSQL
trackTableRead (tableNameByteString @model)
sqlQuery @_ @(LabeledData value model) (Query $ cs theQuery) theParameters

{-# INLINE fetchOneOrNothing #-}
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => LabeledQueryBuilderWrapper foreignTable columnName value table -> IO (Maybe model)
fetchOneOrNothing :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => LabeledQueryBuilderWrapper foreignTable columnName value table -> IO (Maybe model)
fetchOneOrNothing = commonFetchOneOrNothing

{-# INLINE fetchOne #-}
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model, KnownSymbol (GetTableName model)) => LabeledQueryBuilderWrapper foreignTable columnName value table -> IO model
fetchOne :: (?modelContext :: ModelContext) => (Table model, PG.FromRow model) => LabeledQueryBuilderWrapper foreignTable columnName value table -> IO model
fetchOne = commonFetchOne



{-# INLINE commonFetch #-}
commonFetch :: forall model table queryBuilderProvider joinRegister.(Table model, HasQueryBuilder queryBuilderProvider joinRegister, model ~ GetModelByTableName table, KnownSymbol table, KnownSymbol (GetTableName model), PG.FromRow model, ?modelContext :: ModelContext) => queryBuilderProvider table -> IO [model]
commonFetch :: forall model table queryBuilderProvider joinRegister.(Table model, HasQueryBuilder queryBuilderProvider joinRegister, model ~ GetModelByTableName table, KnownSymbol table, PG.FromRow model, ?modelContext :: ModelContext) => queryBuilderProvider table -> IO [model]
commonFetch !queryBuilder = do
let !(theQuery, theParameters) = queryBuilder
|> toSQL
trackTableRead (tableNameByteString @model)
sqlQuery (Query $ cs theQuery) theParameters

{-# INLINE commonFetchOneOrNothing #-}
commonFetchOneOrNothing :: forall model table queryBuilderProvider joinRegister.(?modelContext :: ModelContext) => (Table model, KnownSymbol table, HasQueryBuilder queryBuilderProvider joinRegister, PG.FromRow model, KnownSymbol (GetTableName model)) => queryBuilderProvider table -> IO (Maybe model)
commonFetchOneOrNothing :: forall model table queryBuilderProvider joinRegister.(?modelContext :: ModelContext) => (Table model, KnownSymbol table, HasQueryBuilder queryBuilderProvider joinRegister, PG.FromRow model) => queryBuilderProvider table -> IO (Maybe model)
commonFetchOneOrNothing !queryBuilder = do
let !(theQuery, theParameters) = queryBuilder
|> buildQuery
Expand All @@ -124,7 +124,7 @@ commonFetchOneOrNothing !queryBuilder = do
pure $ listToMaybe results

{-# INLINE commonFetchOne #-}
commonFetchOne :: forall model table queryBuilderProvider joinRegister.(?modelContext :: ModelContext) => (Table model, KnownSymbol table, Fetchable (queryBuilderProvider table) model, HasQueryBuilder queryBuilderProvider joinRegister, PG.FromRow model, KnownSymbol (GetTableName model)) => queryBuilderProvider table -> IO model
commonFetchOne :: forall model table queryBuilderProvider joinRegister.(?modelContext :: ModelContext) => (Table model, KnownSymbol table, Fetchable (queryBuilderProvider table) model, HasQueryBuilder queryBuilderProvider joinRegister, PG.FromRow model) => queryBuilderProvider table -> IO model
commonFetchOne !queryBuilder = do
maybeModel <- fetchOneOrNothing queryBuilder
case maybeModel of
Expand Down Expand Up @@ -203,7 +203,7 @@ findBy !field !value !queryBuilder = queryBuilder |> filterWhere (field, value)
{-# INLINE findMaybeBy #-}
findMaybeBy !field !value !queryBuilder = queryBuilder |> filterWhere (field, value) |> fetchOneOrNothing

--findManyBy :: (?modelContext :: ModelContext, PG.FromRow model, KnownSymbol (GetTableName model), KnownSymbol name, ToField value, HasField name value model) => Proxy name -> value -> QueryBuilder model -> IO [model]
--findManyBy :: (?modelContext :: ModelContext, PG.FromRow model, KnownSymbol name, ToField value, HasField name value model) => Proxy name -> value -> QueryBuilder model -> IO [model]
{-# INLINE findManyBy #-}
findManyBy !field !value !queryBuilder = queryBuilder |> filterWhere (field, value) |> fetch
-- Step.findOneByWorkflowId id == queryBuilder |> findBy #templateId id
Expand Down
1 change: 0 additions & 1 deletion IHP/FetchRelated.hs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ instance (
instance (
Eq (PrimaryKey tableName)
, ToField (PrimaryKey tableName)
, Show (PrimaryKey tableName)
, HasField "id" relatedModel (Id' tableName)
, relatedModel ~ GetModelByTableName (GetTableName relatedModel)
, Table relatedModel
Expand Down
4 changes: 2 additions & 2 deletions IHP/FileStorage/ControllerFunctions.hs
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ contentDispositionAttachmentAndFileName fileInfo = pure (Just ("attachment; file
-- > company <- company |> updateRecord
-- > redirectTo EditCompanyAction { .. }
--
uploadToStorageWithOptions :: forall (fieldName :: Symbol) context record (tableName :: Symbol). (
uploadToStorageWithOptions :: forall (fieldName :: Symbol) record (tableName :: Symbol). (
?context :: ControllerContext
, SetField fieldName record (Maybe Text)
, KnownSymbol fieldName
Expand Down Expand Up @@ -319,7 +319,7 @@ uploadToStorageWithOptions options field record = do
-- > company <- company |> updateRecord
-- > redirectTo EditCompanyAction { .. }
--
uploadToStorage :: forall (fieldName :: Symbol) context record (tableName :: Symbol). (
uploadToStorage :: forall (fieldName :: Symbol) record (tableName :: Symbol). (
?context :: ControllerContext
, SetField fieldName record (Maybe Text)
, KnownSymbol fieldName
Expand Down
2 changes: 0 additions & 2 deletions IHP/IDE/CodeGen/MailGenerator.hs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
module IHP.IDE.CodeGen.MailGenerator (buildPlan, buildPlan', MailConfig (..)) where

import IHP.Prelude
import IHP.HaskellSupport
import IHP.ViewSupport
import IHP.IDE.CodeGen.Types
import qualified Data.Text as Text
import qualified IHP.IDE.SchemaDesigner.Parser as SchemaDesigner
Expand Down
1 change: 0 additions & 1 deletion IHP/IDE/CodeGen/ScriptGenerator.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
module IHP.IDE.CodeGen.ScriptGenerator (buildPlan) where

import IHP.Prelude
import IHP.ViewSupport
import IHP.IDE.CodeGen.Types

buildPlan :: Text -> Either Text [GeneratorAction]
Expand Down
2 changes: 0 additions & 2 deletions IHP/IDE/CodeGen/View/Generators.hs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
module IHP.IDE.CodeGen.View.Generators where

import IHP.ViewPrelude
import IHP.IDE.SchemaDesigner.Types
import IHP.IDE.ToolServer.Types
import IHP.IDE.ToolServer.Layout
import IHP.IDE.CodeGen.Types
import qualified Data.Text as Text
import IHP.IDE.SchemaDesigner.View.Layout

data GeneratorsView = GeneratorsView

Expand Down
3 changes: 0 additions & 3 deletions IHP/IDE/CodeGen/View/NewAction.hs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
module IHP.IDE.CodeGen.View.NewAction where

import IHP.ViewPrelude
import IHP.IDE.SchemaDesigner.Types
import IHP.IDE.ToolServer.Types
import IHP.IDE.ToolServer.Layout
import IHP.IDE.SchemaDesigner.View.Layout
import IHP.IDE.CodeGen.Types
import IHP.IDE.CodeGen.View.Generators (renderPlan)

Expand Down

0 comments on commit 5338630

Please sign in to comment.