Size: a a a

Compiler Development

2020 February 03

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
Yuriy Syrovetskiy
вот на Хаскеле, чисто как упражнение

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

import Prelude hiding (any)

main :: IO ()
main =
 print $
   (\(x :: forall a . Any a => a) ->
       (x :: Int -> Int) (x :: Int))
     any

class Any a where
 any :: a

instance Any Int where
 any = 0

instance Any (a -> a) where
 any = id
existential?
источник

YS

Yuriy Syrovetskiy in Compiler Development
вот так покороче

((\x -> x (x :: Int))
   :: (forall a . Any a => a) -> Int)
 any
источник

YS

Yuriy Syrovetskiy in Compiler Development
не уверен. я плохо разбираюсь в отличиях универсальной и экзистенциальной квантификации
источник

EM

Evgenii Moiseenko in Compiler Development
Yuriy Syrovetskiy
не уверен. я плохо разбираюсь в отличиях универсальной и экзистенциальной квантификации
в хаскелле вроде так пишется экзистенциальный тип, с forall, ага, чтобы вы не запутались
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
Evgenii Moiseenko
в хаскелле вроде так пишется экзистенциальный тип, с forall, ага, чтобы вы не запутались
смотря где он находится
источник

YS

Yuriy Syrovetskiy in Compiler Development
Evgenii Moiseenko
в хаскелле вроде так пишется экзистенциальный тип, с forall, ага, чтобы вы не запутались
вроде его смысл зависит от положения. в одном месте это ∀, в другом ∃.
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
в пределах конструктора или за ним
источник

KR

K R in Compiler Development
Ilya Tarasov
Я бы вот как долгое время работавший физиком прокомментировал, но нужен ли тут флейм?
Прокомментируйте, пожалуйста, интересно сравнить мои мысли (как теорфизика).
источник

YS

Yuriy Syrovetskiy in Compiler Development
вот, получилось без аннотаций внутри лямбды

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}

import Prelude hiding (any)

main :: IO ()
main =
 print $
   ((\x -> x x) :: (forall a . Any a => a) -> Int)
     any

class Any a where
 any :: a

instance Any Int where
 any = 0

instance a ~ b => Any (a -> b) where
 any = id
источник

YS

Yuriy Syrovetskiy in Compiler Development
Yuriy Syrovetskiy
вот, получилось без аннотаций внутри лямбды

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}

import Prelude hiding (any)

main :: IO ()
main =
 print $
   ((\x -> x x) :: (forall a . Any a => a) -> Int)
     any

class Any a where
 any :: a

instance Any Int where
 any = 0

instance a ~ b => Any (a -> b) where
 any = id
@omgszer, ок?
источник

AH

Ayrat Hudaygulov in Compiler Development
ну… вроде бы да
источник

EM

Evgenii Moiseenko in Compiler Development
ладно, я был опрометчив, когда сказал что (\x -> x x) нигде не протайпчекается :)
но если не брать в счёт фокусы с Any, плюсы конечно неприятно удивили
источник

IT

Ilya Tarasov in Compiler Development
K R
Прокомментируйте, пожалуйста, интересно сравнить мои мысли (как теорфизика).
В целом, для любой предметной области вопросы программирования несколько вторичны. Они либо помогают работать, либо мешают. Я предпочел бы, чтобы врач тратил время на изучение медицины, а не того, как работать на "новом, шикарном языке программирования", который для него придумали
источник

KR

K R in Compiler Development
Ну да. Но в этом консенсус. В чате.
источник

IT

Ilya Tarasov in Compiler Development
Вопросы выбора между ФП или процедурным программированием (хоть бы даже Бейсик, Ассемблер, и т.д.) определяются критическими местами в проекте, а не пожеланиями программиста. Если те идеи, вокруг которых идет основная деятельность, хорошо ложатся на ФП, будет ФП. А если нет, то навязывание любой технологии будет просто раздражающим фактором
источник

KR

K R in Compiler Development
Да, аналогично консенсус.
источник

IT

Ilya Tarasov in Compiler Development
все равно все упрется в конкретного специалиста, который будет конкретизировать задачу. Программисты же обычно сводят все к чему-то вроде "таким образом, этот новый язык может решить любую вашу задачу". А тот, кто может эту задачу сформулировать, может быть совершенно прохладен к тому, что ему там предлагают. Пусть он даже слегка отстает от трендов
источник

IT

Ilya Tarasov in Compiler Development
но если к этому же пришли, меня это радует :)
источник

KR

K R in Compiler Development
Там более тонкие материи разбираются.
источник

IT

Ilya Tarasov in Compiler Development
да я прочитал. но не впечатлился :) все равно что обсуждать, в каком формате хранить БД по пациентам. неужели врачам больше нечего обсуждать? ну а физикам точно так же
источник