leftJoinF в Opaleye и IfPP - PullRequest
       15

leftJoinF в Opaleye и IfPP

0 голосов
/ 01 мая 2018

Я хочу использовать LEFT JOIN для получения товаров и их (необязательных) атрибутов. У меня есть такие типы, как:

type ProductPGR = ProductPoly (Column (PGID Product)) (Column PGText)
type ProductAttributePGR = ProductAttributePoly (Column (PGID ProductAttribute)) (Column (PGID Product)) (Column PGInt4)

Мое намерение было использовать:

  (p :: ProductPGR, pa :: Maybe ProductAttributePGR) <- leftJoinF
    (\p' pa' -> (p', Just pa'))
    (\p'     -> (p', Nothing))
    (\p' pa' -> productId p' .== paProductId pa')
    productQuery
    productAttributeQuery -< ()

Это не компилируется, потому что:

No instance for (Default
                     IfPP
                     (Maybe
                        (ProductAttributePoly
                           (Column (PGID ProductAttribute))
                           (Column (PGID Product))
                           (Column PGInt4))))
                     (Maybe
                        (ProductAttributePoly
                           (Column (PGID ProductAttribute))
                           (Column (PGID Product))
                           (Column PGInt4))))
arising from a use of ‘leftJoinF’

Я действительно должен определить этот экземпляр? Для чего это нужно и как мне это сделать?

Или, если я не должен использовать Maybe, что бы я еще делал?

1 Ответ

0 голосов
/ 12 мая 2018

Вы не можете вернуть Maybe из функционального соединения. Функциональное соединение позволяет вам избежать Nullable в том смысле, что оно скрывает от вас проверку IS NULL. Это не позволяет вам «поднять обнуляемость» на сторону Haskell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...