Использование класса haskell «Default» из внешних пакетов: пример запроса - PullRequest
0 голосов
/ 04 июля 2018

Попытка запустить прокси-сервер haskell «haxy» . С

proxyMain :: forall s. HStream s => Settings s -> IO ()

и

class Default a where
    A class for types with a default value.
    Methods
        def :: a
            The default value for this type.
    Instances
        Default (Cache s), Default (Settings s) 

Основной вопрос: как передать настройки по умолчанию на proxyMain?

И второстепенный: что такое :: forall s. HStream s => как часть функции?

1 Ответ

0 голосов
/ 04 июля 2018

def - это просто предопределенный объект Settings s (его определение не заботится о том, какой тип s может потребоваться), а не функция. Просто передайте его как любое другое значение (но, как указывает Даниэль Вагнер, с конкретным типом, поскольку def является полиморфной константой ).

proxyMain (def :: Settings Foo)
-- Or, using the TypeApplication extension
-- proxyMain @Foo def

(где Foo - это любой тип с экземпляром HStream, который вы используете).

forall s . HStream s является ограничением (forall s является необязательным; оно могло быть записано proxyMain :: HStream s => Settings s -> IO ()). Теоретически, однажды можно было создать значение типа Settings Int. Без ограничения proxyMain примет это в качестве аргумента. Предполагая, что Int не является экземпляром HStream, ограничение не позволит proxyMain принять его.

...