to post messages and comments.

а по какому принципу на stepic винды решения людей, а то например на haskell, там вечно какие-то 6 рандомных решений с пафосными комментариями, учитывая, что всего проходит человек 100.

Ну вот и закончился курс по хаскелю. Впечатления — очень хороший курс, автора молодцы. Хотя часть о монадах чувствую без практике послезавтра выветрится из головы, потому что походу не сильно там и задержалась. Например, я так и не понял как сделать последнее задание при помощи монады State, потому сделал без монад codepad.org
В кратце, есть дерево (), надо переделать в дерево чисел что бы были пронумерованы слева направо.

что-то мое решение к задачам о монаде IO не принимается, выдавая ошибки компиляции. Не пойму в чем проблема, на моей машине все работает — codepad.org
не думаю что вопрос о Хаскеле, скорее о степике. Но если я делаю что-то не так — можете тоже написать. Условие в /1

Помните я говорил wat на туплы хаскеля #2807019? Оказалось что час назад окрылась последняя неделя курсов, где о этом рассказывают прям stepic.org клево.
А еще (1) — это не тупл. Это просто 1 в скобках :( походу хаскель не умеет туплы (как умеет их питон, например)

Интересный урок. Но блин, я не сделал 3 заданька. Помощь приветствуется.

1 — сраные галочки. Я вообще не пойму что с меня хотят, и вообще что за хрень спрашивают и почему что-то кроме `emptyOrSingleton False undefined` верно stepic.org

2 — более общий вопрос по хаскелю. Вот я написал кот. Вроде все сходится по типам, но не работает, я не понимаю почему. Как это вообще "дебажить"? stepic.org
Вот мой код — codepad.org

3 — что-то заметил что пропустил. Пока совсем не понял что с меня вообще хотят stepic.org

Долго долбился как написать stepic.org а потом фигак проснулся и написал решения в две строчки... Прям хорошо.
А вот с свертками что-то ступорю.

пока что любимое решение это:

evenOnly :: [a] -> [a]
evenOnly = map snd . filter (even .fst) . zip [1..]

Вот со свертками родил вот это:
evenOnly :: [a] -> [a]
evenOnly = foldr (\(i,x) a -> if even i then x:a else a) [] . zip [1..]

А есть ли что более красивое?

блин.. они на курсе реально обижают, одна задача реализовать функцию, а следующая так чтобы работала с бесконечными списками. И что делать если она сразу работает, разреализовать назад

Что-то застопорился неожиданно на https://stepic.org/lesson/12321/step/8
Не пойму, что не так...

perms :: [a] -> [[a]]
perms [] = []
perms [x] = [[x]]
perms (x:xs) = concatMap (interleave x) (perms xs)
  where
    interleave :: a -> [a] -> [[a]]
    interleave a l = interleave' a l []

    interleave' :: a->[a]->[a]->[[a]]
    interleave' a [] rs = [a : rs]
    interleave' a [email protected](l:el) rs = (ls ++ [a]  ++ rs) : interleave' a el (l:rs)

Вот мне на степике написали, что функция
fortyTwo = 39 + 3
будет закеширована в компиляторе и интерпретаторе, т.к. она не принимает аргументов.
А у меня это не работает :)

```
Prelude Debug.Trace> let fortyTwo = trace "evaluated" (39+3)
Prelude Debug.Trace> fortyTwo
evaluated
42
Prelude Debug.Trace> fortyTwo :: Int
evaluated
42
Prelude Debug.Trace> fortyTwo :: Double
evaluated
42.0
Prelude Debug.Trace> map (+fortyTwo) [1..10]
[evaluated
43,44,45,46,47,48,49,50,51,52]
Prelude Debug.Trace> map (+fortyTwo) [1..10]
[evaluated
43,44,45,46,47,48,49,50,51,52]
```
и
```
Prelude Debug.Trace> data N = forall n . (Num n,Show n) => N n
Prelude Debug.Trace> let shown (N x) = show x
Prelude Debug.Trace> map (\(N n) -> show $ n + fortyTwo) [ N (1::Int), N (1::Int), N (0.5::Double)]
["evaluated
43","evaluated
43","evaluated
42.5"]
```

или не хорошо так троллить?