Я считаю, что не могу использовать функции из 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|
| ^^^^^^^^^^^^^^...