Size: a a a

2021 February 13

MK

Maxim Koltsov in Haskell
интересно стоит ли его брать в прод
источник

MK

Maxim Koltsov in Haskell
а то у меня есть юзкейс
источник

R

Roman in Haskell
I O
Если сделать Elem который дает пруф что это действительно элемент, то можно (если я правильно понял задачу). https://gist.github.com/aadaa-fgtaa/242d08aa8cbb85011fbd69614b19ea99
круто. Использую похожий трюк в

{- Note [Universes]
A universe is a collection of tags for types. It can be finite like

   data U a where
       UUnit :: U ()
       UInt  :: U Int

(where 'UUnit' is a tag for '()' and 'UInt' is a tag for 'Int') or infinite like

   data U a where
       UBool :: U Bool
       UList :: !(U a) -> U [a]

Here are some values of the latter 'U' / the types that they encode

       UBool               / Bool
       UList UBool         / [Bool]
       UList (UList UBool) / [[Bool]]

'U' being a GADT allows to package a type from a universe together with a value of that type.
For example,

   Some (ValueOf UBool True) :: Some (ValueOf U)

We say that a type is in a universe whenever there is a tag for that type in the universe.
For example, 'Int' is in 'U', because there exists a tag for 'Int' in 'U' -- 'UInt'.
-}

-- | A value of a particular type from a universe.
data ValueOf uni a = ValueOf (uni a) a

-- | A universe is 'Closed', if it's known how to constrain every type from the universe.
-- The universe doesn't have to be finite
class Closed uni where
   -- | A constrant for \"@constr a@ holds for any @a@ from @uni@\".
   type Everywhere uni (constr :: GHC.Type -> Constraint) :: Constraint

   -- | Bring a @constr a@ instance in scope, provided @a@ is a type from the universe and
   -- @constr@ holds for any type from the universe.
   bring :: uni `Everywhere` constr => proxy constr -> uni a -> (constr a => r) -> r

instance (Closed uni, uni `Everywhere` NFData) => NFData (ValueOf uni a) where
   rnf (ValueOf uni x) = bring (Proxy @NFData) uni $ rnf x
источник

MK

Maxim Koltsov in Haskell
у меня есть AST лямбда-подобного языка
как с меньшей болью для него сделать прети-принтер?
источник

JS

Jerzy Syrowiecki in Haskell
Maxim Koltsov
у меня есть AST лямбда-подобного языка
как с меньшей болью для него сделать прети-принтер?
deriving Show + pretty-simple
источник

к

кана in Haskell
еще шовер можно - https://monadfix.com/shower

но мне кажется хочется не этого, а вывести в какой-то псевдосинтаксис
источник

MK

Maxim Koltsov in Haskell
да, я не хочу читать портянку App x (App y (App z (....)
источник

MK

Maxim Koltsov in Haskell
хочу сделать читаемо
источник

к

кана in Haskell
ну с prettyprinter не так больно писать притипринтеры, забыв про возню с отступами всякими
источник

BK

Boris K in Haskell
Немного необычный вопрос:
А можно ли сделать из дистрибутива ghc свой, портабельный вариант, с добавлением туда ряда внешних библиотек, вроде Qt и/или какой-то либы для какой-то СУБД, неважно. Главное, чтобы был чёткий алгоритм, как это сделать?
То есть на входе стандартный дистрибутив ghc, а также дистрибутивы нужных библиотек, а на выходе - свой портабельный вариант дистрибутива.
источник

JS

Jerzy Syrowiecki in Haskell
haskellformac вроде является таким дистрибутивом
источник

к

кана in Haskell
ну можно все в докер запихнуть

под портабельным подразумевается что-то, что не нужно устанавливать?
источник

JS

Jerzy Syrowiecki in Haskell
компилятор и исходники всех нужных пакетов можно заранее скачать, но stack компилирует на каждой машине прослойку и использует абсолютные пути, на новой машине надо будет пересобрать, хотя это делается и без интернета
источник

BK

Boris K in Haskell
кана
ну можно все в докер запихнуть

под портабельным подразумевается что-то, что не нужно устанавливать?
Да. Просто извлечь из архива в каталог Windows 7 / 10.
А затем стандартно запустить ghc -O2 <имя файла> <ключи>
При условии, если все либы указаны в import, конечно.
источник

к

кана in Haskell
я не очень уверен, но вроде много лет назад в убунту впихнули поддержку пакетов, которые держат все зависимости в себе и не идут в систему
источник

к

кана in Haskell
маковоские пакеты такие же наверное
источник

к

кана in Haskell
а вот про винду ничего не знаю
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
компилятор и исходники всех нужных пакетов можно заранее скачать, но stack компилирует на каждой машине прослойку и использует абсолютные пути, на новой машине надо будет пересобрать, хотя это делается и без интернета
можно попробовать ghcup+cabal, там, может, проще
источник

JS

Jerzy Syrowiecki in Haskell
кана
я не очень уверен, но вроде много лет назад в убунту впихнули поддержку пакетов, которые держат все зависимости в себе и не идут в систему
даже несколько — flatpak, AppImage, Snappy
источник

BK

Boris K in Haskell
Snappy - что он даст? Это же архиватор.
источник