2016-08-24 3 views
1

Я делаю это в psci repl. Это моя функция:как шаблон сопоставить список голова и хвост в purescript

$> import Data.List 
$> let f (x:xs) = x 
$> let f Nil = Nil 

$> let a = 1:2:3:Nil 

$> f a 

Я получаю эту ошибку:

Could not match type 

    Int 

    with type 

    List t0 


while trying to match type List Int 
    with type List (List t0) 
while checking that expression a 
    has type List (List t0) 
in value declaration it 

where t0 is an unknown type 

Я понимаю, что это происходит потому, что моя функция f не имеет подписи, которая возвращает List Int. Но как объявить один в реплике?

ответ

1

Проблема здесь f возвращается два различных типа:

let f (x:xs) = x 

возвращает элемент списка (так a или Int в случае f a), в то время как

let f Nil = Nil 

возвращается List.

+0

Как исправить это, чтобы 'f' вернул тип' Maybe'? – dopatraman

+0

'f (x: xs) = Just x' ' f Nil = Nothing' –

Смежные вопросы