Не удалось совместить ожидаемый тип "Текст" с фактическим типом `[Char] '
Это может быть действительно нубийский вопрос, но я не могу преодолеть эту проблему (поскольку я только начал изучать Haskell).
У меня есть простой блок кода:
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
, затем.
Ответ 2
В моем случае у меня был код, который делал объединение значений String и Text:
"cd " ++ stackProjectLocation
"cd "
имел тип Text из-за использования {-# LANGUAGE OverloadedStrings #-}
И stackProjectLocation
был строкой
Решением было использовать (<>) :: Semigroup a => a -> a -> a
:
"cd " <> stackProjectLocation