LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

То есть то, что на лиспе делается тривиально

(defstruct cons (car cdr))

Тип вроде очевиден:

data Cons a b = Cons a b

Потом берём алгоритм построения списка из этих ячеек. Вводим >специальный элемент end. В лиспе это символ, в Хаскеле

data End = End

Ну, то есть, ты решил сделать через задницу и жалуешься, что получается через задницу?

И тут выясняется, что эту функцию написать невозможно, несмотря на то, что её тип точно определён (Сons a b -> Int).

Потому что для любых a и b такая функция и правда невозможна. У тебя огромные проблемы в логике здесь, но ты пытаешься их выдавать за недостатки хачкеля.

data End = End

data Cons a b = Cons a (Either End b)

type List a = Cons a (List a)

len :: List a
len (Cons _ (Left End)) = 1
len (Cons _ (Right l)) = 1 + len l

Кстати, твой список не может быть пустым по определению, но это детали.

Выкидываем всё написанное, начинаем читать про HList.

data List a = Cons a (List a) | Nil

len :: List a -> Word
len Nil = 0
len (Cons _ l) = 1 + len l

Вообще не понимаю твоей проблемы тут.

Исправление hateyoufeel, :

То есть то, что на лиспе делается тривиально

(defstruct cons (car cdr))

Тип вроде очевиден:

data Cons a b = Cons a b

Потом берём алгоритм построения списка из этих ячеек. Вводим >специальный элемент end. В лиспе это символ, в Хаскеле

data End = End

Ну, то есть, ты решил сделать через задницу и жалуешься, что получается через задницу?

И тут выясняется, что эту функцию написать невозможно, несмотря на то, что её тип точно определён (Сons a b -> Int).

Потому что для любых a и b такая функция и правда невозможна. У тебя огромные проблемы в логике здесь, но ты пытаешься их выдавать за недостатки хачкеля.

data End = End

data Cons a b = Cons a (Either End b)

type List a = Cons a (List a)

len :: List a
len (Cons _ (Left End)) = 1
len (Cons _ (Right l)) 1 + len l

Кстати, твой список не может быть пустым по определению, но это детали.

Выкидываем всё написанное, начинаем читать про HList.

data List a = Cons a (List a) | Nil

len :: List a -> Word
len Nil = 0
len (Cons _ l) = 1 + len l

Вообще не понимаю твоей проблемы тут.

Исправление hateyoufeel, :

То есть то, что на лиспе делается тривиально

(defstruct cons (car cdr))

Тип вроде очевиден:

data Cons a b = Cons a b

Потом берём алгоритм построения списка из этих ячеек. Вводим >специальный элемент end. В лиспе это символ, в Хаскеле

data End = End

Ну, то есть, ты решил сделать через задницу и жалуешься, что получается через задницу?

И тут выясняется, что эту функцию написать невозможно, несмотря на то, что её тип точно определён (Сons a b -> Int).

Потому что для любых a и b такая функция и правда невозможна. У тебя огромные проблемы в логике здесь, но ты пытаешься их выдавать за недостатки хачкеля.

data End = End
  deriving Eq

data Cons a b = Cons a (Either End b)

type List a = Cons a (List a)

len :: List a
len (Cons _ (Left End)) = 1
len (Cons _ (Right l)) 1 + len l

Кстати, твой список не может быть пустым по определению, но это детали.

Выкидываем всё написанное, начинаем читать про HList.

data List a = Cons a (List a) | Nil

len :: List a -> Word
len Nil = 0
len (Cons _ l) = 1 + len l

Вообще не понимаю твоей проблемы тут.

Исходная версия hateyoufeel, :

То есть то, что на лиспе делается тривиально

(defstruct cons (car cdr))

Тип вроде очевиден:

data Cons a b = Cons a b

Потом берём алгоритм построения списка из этих ячеек. Вводим >специальный элемент end. В лиспе это символ, в Хаскеле

data End = End

Ну, то есть, ты решил сделать через задницу и жалуешься, что получается через задницу?

И тут выясняется, что эту функцию написать невозможно, несмотря на то, что её тип точно определён (Сons a b -> Int).

Потому что для любых a и b такая функция и правда невозможна. У тебя огромные проблемы в логике здесь, но ты пытаешься их выдавать за недостатки хачкеля.

Выкидываем всё написанное, начинаем читать про HList.

data List a = Cons a (List a) | Nil

len :: List a -> Word
len Nil = 0
len (Cons _ l) = 1 + len l

Вообще не понимаю твоей проблемы тут.