2015-05-10 6 views
1

Я следил за (старым?) tutorial и получил несоответствие типа. Изменена ли библиотека List с 0.14.1 до 0.15? elmpage.Elm Тип списка несоответствие

Код:

module Fibonacci where 

import List exposing (..) 

fibonacci : Int -> List Int 
fibonacci n = 
    let fibonacci1 n acc = 
      if n <= 2 
       then acc 
       else fibonacci1 (n-1) ((head acc + (tail >> head) acc) :: acc) 
    in 
     fibonacci1 n [1,1] |> reverse 

Несоответствие типа:

Type mismatch between the following types on line 11, column 40 to 69: 

     number 

     Maybe.Maybe a 

    It is related to the following expression: 

     (head acc) + ((tail >> head) acc) 

Type mismatch between the following types on line 11, column 52 to 64: 

     Maybe.Maybe 

     List 

    It is related to the following expression: 

     tail >> head 

ответ

2

Да, я боюсь, что оба эти старые (вдовцы) материал (чем 0,15). В Elm 0.15 используется ядро ​​2.0.1, в котором (как предполагает версия) нарушаются изменения.
Тот, с которым вы работаете, заключается в том, что head и tail теперь возвращают Nothing вместо сбоев в пустых списках. Когда список не пуст, вы получаете голову/хвост, завернутый в Just. Эти два конструктора имеют тип Maybe.

Вот некоторые обновленный код (который не нуждается в голову/хвост):

fibonacci : Int -> List Int 
fibonacci goal = 
    let fibonacciHelp n a b fibs = 
     if n >= goal 
      then List.reverse fibs 
      else fibonacciHelp (n+1) (a + b) a (a :: fibs) 
    in 
     fibonacciHelp 0 1 0 [] 

Источники:

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