Не удалось сопоставить ожидаемый тип `Text'с фактическим типом`[Char]'

Это может быть действительно нубистский вопрос, но я не могу обойти эту проблему (поскольку я только начал изучать Хаскель).

У меня есть простой блок кода:

module SomeTest where
import Data.Text

str =  replace "ofo" "bar" "ofofo"

Если я позвоню с str, Я получил:

<interactive>:108:19: error:
* Couldn't match expected type `Text' with actual type `[Char]'
* In the first argument of `Data.Text.replace', namely `"ofo"'
  In the expression: Data.Text.replace "ofo" "bar" "ofofo"
  In an equation for `it': it = Data.Text.replace "ofo" "bar" "ofofo"

<interactive>:108:25: error:
* Couldn't match expected type `Text' with actual type `[Char]'
* In the second argument of `Data.Text.replace', namely `"bar"'
  In the expression: Data.Text.replace "ofo" "bar" "ofofo"
  In an equation for `it': it = Data.Text.replace "ofo" "bar" "ofofo"

<interactive>:108:31: error:
* Couldn't match expected type `Text' with actual type `[Char]'
* In the third argument of `Data.Text.replace', namely `"ofofo"'
  In the expression: Data.Text.replace "ofo" "bar" "ofofo"
  In an equation for `it': it = Data.Text.replace "ofo" "bar" "ofofo"

Я не знаю, почему я получаю эту ошибку и как ее пропустить. не Text просто синоним [Char]?

1 ответ

Решение

К сожалению, в Haskell есть несколько конфликтующих типов для строк символов. Строковые литералы обычно имеют тип String который просто псевдоним для [Char], Поскольку это неэффективное представление строк, есть альтернативы, такие как Text,

В вашем случае добавление {-# LANGUAGE OverloadedStrings #-} так как первая строка вашей программы заставит ее скомпилироваться. В основном ваши строковые литералы могут быть типа Text затем.

В моем случае у меня был код, который объединял строковое и текстовое значение:

"cd " ++ stackProjectLocation

"cd " был типа Text из-за использования {-# LANGUAGE OverloadedStrings #-}

А также stackProjectLocation была строка

Решением было использовать (<>) :: Semigroup a => a -> a -> a:

"cd " <> stackProjectLocation
Другие вопросы по тегам