Я думаю, проблема в том, что вы создаете новое соединение в функции, а затем не закрываете ее в конце. Почему бы вам не попробовать перейти к существующему соединению и повторно использовать его?
Другая возможность заключается в том, что вы возвращаетесь из середины цикла. Вы никогда не завершаете эту внешнюю выборку.
Это DataKinds
в действии, которое:
Это, однако, вызывает путаницу на уровне типа. Теперь в типах [X]
может быть либо [X] :: *
, либо тип списка X
, либо вместо этого мы могли бы иметь [X] :: [T]
из-за подъема - это значение [X]
(только список, содержащий только единственное значение X
) с X
типа T
, поднятое на уровне уровня.
Чтобы преодолеть эту двусмысленность, GHC требует цитаты перед конструкторами с поднятыми значениями. Итак, у нас есть [X] :: *
и '[X] :: [T]
.
Конкретно, в вашем случае Get '[JSON] [User]
включает как значение списка [JSON]
, поднятое до уровня типа, так и тип списка [User]
, Чтобы лучше понять разницу, обратите внимание, что терминов типа '[JSON]
нет, поскольку это не тип списка. Мы могли бы даже иметь Get '[JSON,JSON,JSON] [User]
как хорошо выраженное выражение или даже Get '[] [User]
. Вместо этого мы не можем иметь Get '[JSON] [User,User]
, так как [User,User]
не является типом.
(Тип Get '[JSON,JSON,JSON] [User]
, даже если он действителен, не может быть осмысленно использован библиотекой Servant. не знаю, для чего этот поднятый список используется в Слуге.)
Котировки используются для различения конструкторов типового типа по сравнению с конструкторами уровня уровня продвигаемых типов.
Например:
{-# LANGUAGE DataKinds #-}
data Which = One | Two
myPick :: Which -- Type
myPick = One
type MyPick :: Which -- Kind
type MyPick = 'One
Кстати, аннотация вида вида type MyPick :: Which
недействителен Haskell, но он дает вам представление о соответствии между термином и уровнем типа. Самое близкое, что вам нужно для этого, необходимо включить другое расширение:
{-# LANGUAGE TypeFamilies #-}
type family MyPick :: Which where
MyPick = 'One
'[JSON]
не является типом вообще, не должно быть никаких условий этого «типа». – luqui 12 August 2018 в 07:18