Haskell использует OverloadedStrings, но все равно получает ошибку [Char] - PullRequest
0 голосов
/ 11 апреля 2019

Я понимаю по таким вопросам, как , и , , что использование PRAGMA OverloadedStrings означает, что я должен иметь возможность использовать текст в качестве строкового типа.

Однако, когда я проверяю мои типы данных с текстом, я получаю следующую ошибку:

$ stack ghci
Prelude> :l myfile.hs
Ok, one module loaded.
*Main> Rec "asd" "m"

<interactive>:46:5: error:
    • Couldn't match expected type ‘Text’ with actual type ‘[Char]’
    • In the first argument of ‘Rec’, namely ‘"asd"’
      In the expression: Rec "asd" "m"
      In an equation for ‘it’: it = Rec "asd" "m"

<interactive>:46:11: error:
    • Couldn't match expected type ‘Text’ with actual type ‘[Char]’
    • In the second argument of ‘Rec’, namely ‘"m"’
      In the expression: Rec "asd" "m"
      In an equation for ‘it’: it = Rec "asd" "m"

Мой код выглядит следующим образом:

{-# LANGUAGE DeriveGeneric,  OverloadedStrings,  DefaultSignatures,  TypeOperators,  FlexibleContexts, RecordWildCards, FlexibleInstances, ExtendedDefaultRules #-}

import qualified Data.Map as Map
import qualified Data.Set as Set
-- import qualified Data.Text as T
import Data.Text (Text)
import GHC.Generics

data Rec  = Rec {
     recCategory :: Text,
     recId :: Text
     } deriving Generic

Что ячто-то не так?

Я вижу в этот вопрос предложение:

РЕДАКТИРОВАТЬ Вы также можете добавить по умолчанию (текст) в верхней части вашего модулячтобы он использовал текст вместо строки по умолчанию.

Но мне не ясно, какой будет синтаксис, позволяющий использовать это значение по умолчанию

1 Ответ

5 голосов
/ 11 апреля 2019

Вы включили «OverloadedStrings» в своем файле, но это также не включается в ghci.Для этого вам понадобится set: set -XOverloadedStringsˋ.Обратите внимание, что расширение влияет на места, где вы пишете строковые литералы, не имеет значения, было ли оно включено там, где вы определили свой тип данных.

...