Создание синглтон-типов с использованием текста / символов с использованием TemplateHaskell - PullRequest
0 голосов
/ 31 октября 2018

Я считаю, что не могу использовать функции из Data.Singletons.TH для создания синглетонов для любых типов, включающих в себя Text / Symbol s.

Demote Symbol = Text, так что это явно предназначенный вариант использования для singletons, но независимо от того, какой из них я пытаюсь использовать, я получаю сообщение об ошибке (ниже). Когда я заменяю Text на Symbol или String, появляется сообщение об ошибке, но Text заменяется на Symbol или String.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}

module Lib where

import Data.Singletons.TH
import Data.Text (Text)

$(singletons [d|
  data MyType = MyType Text Text
  |])

Результат:

src/Lib.hs:14:3: error:
    • Could not deduce: Demote Text ~ Text
      from the context: a ~ 'MyType n n1
        bound by a pattern with constructor:
                   SMyType :: forall (n1 :: Text) (n2 :: Text).
                              Sing n1 -> Sing n2 -> Sing ('MyType n1 n2),
                 in an equation for ‘fromSing’
        at src/Lib.hs:(14,3)-(16,4)
    • In the first argument of ‘MyType’, namely ‘(fromSing b_a7ip)’
      In the expression: (MyType (fromSing b_a7ip)) (fromSing b_a7iq)
      In an equation for ‘fromSing’:
          fromSing (SMyType b_a7ip b_a7iq)
            = (MyType (fromSing b_a7ip)) (fromSing b_a7iq)
   |
14 | $(singletons [d|
   |   ^^^^^^^^^^^^^^...

src/Lib.hs:14:3: error:
    • Couldn't match expected type ‘Text’
                  with actual type ‘Demote Text’
    • When checking that the pattern signature: Demote Text
        fits the type of its context: Text
      In the pattern: b_a7is :: Demote Text
      In the pattern:
        MyType (b_a7is :: Demote Text) (b_a7it :: Demote Text)
   |
14 | $(singletons [d|
   |   ^^^^^^^^^^^^^^...
...