Size: a a a

2021 January 17

AP

Aleksei (astynax) Pi... in Haskell Start
Я повторяю свой вопрос, зачем Monad таки? Тут и нужно-то написать рекурсивный поиск с отсеканием неинтересных путей.

Сама возможность реализации do-синтаксиса зависит от того, что закон для >>= выполняется.
Потому что без выполнения этого закона
do
 x <- a >>= b -- (или вынос в функцию, или let)
 c x
и
do
 x <- a
 x' <- b x
 c x'
дадут разные результаты. Я бы не рисковал, имея шанс такое получить
источник

AP

Aleksei (astynax) Pi... in Haskell Start
"У меня точно (ну почти) коммутативно" — сомнительная гарантия
источник

A

Aragaer in Haskell Start
потому что для варианта без отсечения и слияния (полный набор ветвлений) я реализовал это через state и список и оно компактно и читабельно.
источник

A

Aragaer in Haskell Start
и я предполагал, что просто если возьму другой instance, который бы в >>= отсекал бы мне слияния, то больше бы ничего переписывать бы не пришлось. Но видимо это не так.
источник

A

Aragaer in Haskell Start
теперь я вижу эту задачу следующим образом - есть n-мерное пространство состояний мира (вот этот вот Map), есть k векторов. Для данного исходного состояния мира (точка в этом n-мерном пространстве) надо найти последовательность векторов из имеющихся, сумма которых переводит исходный мир в неотрицательный. Дополнительным усложнением является то, что дла некоторых волшебных точек пространства доступны особые вектора, которых нет в других точках.
И да, я понял, почему мне нафиг тут не подойдут монады и даже аппликативы. Потому что я везде оперирую только со State World (). Это был первый затык, когда я только начал это делать, потому что на самом деле я нигде из этих стейтов никакое значение не возвращаю. Да, у меня только функции World -> World. А State World () это был просто удобный способ их записывать в do-нотации.
источник

A

Aragaer in Haskell Start
плюс при реализации экшнов этим было удобно пользоваться, другие варианты State World a там внутри проскакивают
источник
2021 January 19

A

Aragaer in Haskell Start
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Всё, забанил на неделю.
источник

VS

Vyacheslav Shebanov in Haskell Start
привет, вопрос
источник

VS

Vyacheslav Shebanov in Haskell Start
а если есть ADT, есть какой-то вариант как можно получить список всех конструкторов
источник

VS

Vyacheslav Shebanov in Haskell Start
не в ручную?
источник

VS

Vyacheslav Shebanov in Haskell Start
источник

к

кана in Haskell Start
Vyacheslav Shebanov
а если есть ADT, есть какой-то вариант как можно получить список всех конструкторов
если там еще и без полей в конструкторах, то просто (Bounded, Enum)
источник

VS

Vyacheslav Shebanov in Haskell Start
ну там это решение указано
источник

VS

Vyacheslav Shebanov in Haskell Start
мне как раз подходит
источник

к

кана in Haskell Start
можно без Typeable, чисто генериками
источник

к

кана in Haskell Start
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeSynonymInstances #-}

import Data.Proxy
import GHC.Generics
import GHC.TypeLits

class GConstructors rep where
 gconstructors :: [String]

instance GConstructors constructors => GConstructors (D1 meta constructors) where
 gconstructors = gconstructors @constructors

instance GConstructors V1 where
 gconstructors = []

instance KnownSymbol name => GConstructors (C1 (MetaCons name p b) sels) where
 gconstructors = [symbolVal (Proxy @name)]

instance (GConstructors l, GConstructors r) => GConstructors (l :+: r) where
 gconstructors = gconstructors @l <> gconstructors @r

constructors :: forall a. (Generic a, GConstructors (Rep a)) => [String]
constructors = gconstructors @(Rep a)

data X = A Int | B String | C Int deriving (Generic)

data X' = A' Int | B' String | C' deriving (Generic)

data Y = Y deriving (Generic)

data Z deriving (Generic)

main = do
 print $ constructors @X
 print $ constructors @X'
 print $ constructors @Y
 print $ constructors @Z
источник
2021 January 20

AS

Artur Sult in Haskell Start
Привет, есть книга для новичков по практике хаскеля? Задачник.
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Artur Sult
Привет, есть книга для новичков по практике хаскеля? Задачник.
Свёл все ссылки, что вспомнил, сюда:
https://github.com/ruHaskell/ruhaskell/wiki/Exercises
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Народ, если кто знает ещё какие ресурсы с задачками — дополняйте, пожалуйста!
источник