haskellru | Unsorted

Telegram-канал haskellru - Haskell

1756

https://combot.org/chat/-1001043143583 Ссылки на полезные ресурсы: https://ruhaskell.org/links.html ; Информация о мероприятиях: https://gist.github.com/qnikst/a96cac661be80d126d0829f2ced1916e

Subscribe to a channel

Haskell

Это тогда весь код переделывать

Читать полностью…

Haskell

Я хочу добавить спаны в своё аст, но чтобы не пришлось переделывать половину кода и писать гору бойлерплейта

Читать полностью…

Haskell

В общем, я вляпалась в нерешаемую expression problem

Читать полностью…

Haskell

Да блин, неужели я многого хочу?

Читать полностью…

Haskell

Ещё и по паттерну :(

Читать полностью…

Haskell

Пойдёт, только надо свежую версию брать
https://learnyouahaskell.github.io/

Читать полностью…

Haskell

она конечно тоже нудятина жоская

Читать полностью…

Haskell

сейчас лучше вилла курта

Читать полностью…

Haskell

да блин куда проще чем вот это?

Читать полностью…

Haskell

едрить у вас капчи, господа

Читать полностью…

Haskell

я пока не понял для чего, но такую штуку можно переделать под свои нужды будет

а хранить можно как просто пару из индекса тега и f Any от значения

data Variant f scheme = V Int (f Any)

ну и нагородить сюда сейвовой апихи

Читать полностью…

Haskell

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

Читать полностью…

Haskell

и че с этим делать потом, лямбда это не value но expr, а замыкание это не expr но value

Читать полностью…

Haskell

Блин, у нас в проекте так, мне мозг выворачивает

Читать полностью…

Haskell

можно

type Expr = Located Expr'
data Expr' = App Expr Expr | If Expr Expr Expr

Читать полностью…

Haskell

У нас есть JS дома (lens-aeson)

Читать полностью…

Haskell

Она решаемая, но не в хаскелле(

Читать полностью…

Haskell

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE OverloadedLabels #-}

import GHC.TypeLits
import GHC.Exts
import Data.Kind
import GHC.OverloadedLabels
import Unsafe.Coerce
import Data.Proxy

data Pair a b = a `Of` b

type Variant :: [Pair Symbol Type] -> Type
data Variant spec = V Int Any

data N = Z | S N

type KeyIndexN :: Symbol -> [Pair Symbol Type] -> N
type family KeyIndexN k spec where
KeyIndexN k (k `Of` _ : _) = Z
KeyIndexN k (_ : ts) = S (KeyIndexN k ts)

type KeyIndex :: N -> Symbol -> [Pair Symbol Type] -> Constraint
class KeyIndex i k spec where
type KeyType i k spec :: Type
index :: Int

instance KeyIndex Z k (k `Of` t : ts) where
type KeyType Z k (k `Of` t : ts) = t
index = 0

instance KeyIndex n k ts => KeyIndex (S n) k (k' `Of` t : ts) where
type KeyType (S n) k (k' `Of` t : ts) = KeyType n k ts
index = index @n @k @ts + 1

mk :: forall k spec. KeyIndex (KeyIndexN k spec) k spec => KeyType (KeyIndexN k spec) k spec -> Variant spec
mk x = V (index @(KeyIndexN k spec) @k @spec) (unsafeCoerce x)

instance (KeyIndex n k spec, n ~ KeyIndexN k spec, t ~ KeyType n k spec) => IsLabel k (t -> Variant spec) where
fromLabel = mk @k @spec

instance Show (Variant '[]) where
show = undefined

instance (Show (Variant spec), KnownSymbol k, Show t) => Show (Variant (k `Of` t : spec)) where
show (V 0 x) = "#" ++ symbolVal (Proxy :: Proxy k) ++ " " ++ show (unsafeCoerce x :: t)
show (V i x) = show (V (pred i) x :: Variant spec)

type Expr = Variant
[ "Lit" `Of` Int
, "Plus" `Of` (Int, Int) ]

x, y :: Expr
x = #Lit 1
y = #Plus (1, 2)

main = do
print x
print y



без рекурсии такой вариант сделать оч легко, матч добавить сюда тоже не сложно, представление эффективное, конструирование не оч, но можно чет с этим сделать, если со списков перейти на деревья

Читать полностью…

Haskell

лана извините, что мешаю ныть

Читать полностью…

Haskell

ниче громоздкого не вижу блина ваще

Читать полностью…

Haskell

паттерны себе сделай

Читать полностью…

Haskell

Громоздко, по два типа на каждую штуку, матчить лишние конструкторы

Читать полностью…

Haskell

возникло желание обмазаться хаскелем, книга со слонёнком во имя добра пойдёт для вкатывания? программировать умею давно, отличить чистую функцию от чистовиртуальной могу

Читать полностью…

Haskell

Сложна всё как-то :( Хоть на окамл уходить

Читать полностью…

Haskell

а блин, тут рекурсия в тайп-алиасе, а заворачивание в ньютайп руинит все плюсы подхода

Читать полностью…

Haskell

ну сделать какой-нибудь

type Expr f =
Variant f ["Lit" := Int, "Plus" := (Expr f, Expr f)]

#Lit :: f Int -> Expr f
#Plus :: f (Expr f, Expr f) -> Expr f

и потом

x :: Expr (Location,)
x = #Plus (l, (#Lit (l, 42), #Lit (l, 0)))

Читать полностью…

Haskell

или это шутка про бизнес-вэлью?

Читать полностью…

Haskell

А как насчёт
type Expr = Value
и не ныть

Читать полностью…

Haskell

ну это вот напрямую как в GHC

там

type LExpr = Localted Expr
data Expr
= Lit Int
| Plus LExpr LExpr

Читать полностью…

Haskell

а еще я не очень понимаю (но я и не разбирался еще) как делать вложенный аст таким образом (выражения в стейтментах)

Читать полностью…
Subscribe to a channel