Попытка использовать функцию Cons в Purescript

Вот мой код:

print 1: [2,3]

Когда я запускаю его, я получаю

  Cannot unify type
    Data.List.List
  with type
    Prim.Array

Что происходит?


person dopatraman    schedule 11.08.2015    source источник


Ответы (2)


[2, 3] имеет тип Array Int. (:) имеет тип a -> List a -> List a в Data.List. Вам нужно преобразовать в List. Кроме того, то, что у вас есть, будет анализироваться как

(print 1) : [2, 3]

Я думаю, ты хочешь

print (1 : toList [2, 3])

or

print $ 1 : toList [2, 3]
person Phil Freeman    schedule 11.08.2015

В psci посмотрите на тип (:)

> :t (:)
forall a. a -> Data.List.List a -> Data.List.List a

и тип [2, 3]

> :t [2, 3]
Prim.Array Prim.Int

Вы можете видеть, что функция (:) ожидает 2 значения: значение и список того же типа. В своем вопросе вы дали ему массив целых чисел. Вы можете использовать функцию Data.List.toList, чтобы получить тип, который (:) ожидает

> import Data.List
> show $ 1 : (toList [1, 2])
"Cons (1) (Cons (1) (Cons (2) (Nil)))"
person Brent    schedule 11.08.2015