Size: a a a

PureScript — русскоговорящее сообщество

2020 April 23

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
вариант 1
сделать все через именованные индексы TF (теряем возможность что-то сделать с новым TF)
вариант 2
делаем промежуточнй TC (так как нам надо чтобы Eval вычислился до сопоставления тайплевел сигнатур, а потом нужно вычислять наш сопоставляемый тип, как выше в коде)
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
Ага понял, спасибо!
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
еще, ограничение Eval нужно только там, где ты будешь вырывать значение из под ValueOf
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
по факту ты можешь сделать что-то такое

foreign import data Convert :: Symbol -> TF.TypeExpr
instance oneEval :: TF.Eval (Convert "One") SomeType1
instance twoEval :: TF.Eval (Convert "Two") SomeType2
instance threeEval :: TF.Eval (Convert "Three") SomeType3

но зачем?)
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
не не это что то уже перебор для такого кейса
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
тогда юзай datakinds + leibniz
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
Type, the kind of types.
Arrow kinds k1 -> k2
Row kinds # k
User-defined kinds, such as Control.Monad.Eff.Effect, the kind of effects.

Первые три поняно а вот User-defined kinds я не особа понял как свои кайнды использовать, расширение типа нет никакого, считать что он включено бай дефолт?
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
в общем так
foreign import kind E
foreign import data A :: E
foreign import data B :: E
foreign import data C :: E

data EProxy (k :: E) = EProxy

data SingSE (k :: E)
 = SA (EProxy k ~ EProxy A)
 | SB (EProxy k ~ EProxy B)
 | SC (EProxy k ~ EProxy C)

data Output (k :: E)
 = OutputA Int (EProxy k ~ EProxy A)
 | OutputB String (EProxy k ~ EProxy B)
 | OutputC Number (EProxy k ~ EProxy C)

buildOutput :: forall s. SingSE s -> Output s
buildOutput (SA p) = OutputA 10 p
buildOutput (SB p) = OutputB "test" p
buildOutput (SC p) = OutputC 20.5 p


практической ценности я пока не понял
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
короче синглтоны в пурсе не сделать)
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
Офигеть что то много ттелодвижений нужно) А ценность была в том чтобы не дублировать другие пропы везде, то есть вот есть какая то
data SomeData = SomeData {commonProp1 :: SomeType, commonPropN :: SomeTypeN, propData :: }

И вот propData один из суммы типов как раз как задумывалось
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
На практике просто есть евенты с какими ттот общими пропами а дата у них как раз меняется
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
Gleb Patsiia
Ребят как это в пурсе вырзаить?
data Kind = One | Two | Three

data EventData (k :: Kind) where
 DataOne :: { test :: String, hello :: String } -> EventData One
 DataTwo :: { blah :: Integer , lol :: String } -> EventData Two

data Event (k :: Kind) = Event
 { prop1 :: String
 , prop2 :: Integer
 , eventData :: EventData k
 }
ну как в примере
источник

GP

Gleb Patsiia in PureScript — русскоговорящее сообщество
Но если это так заморочено то да пожалуй можно и не ограничивать просто data эту
источник
2020 April 24

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
хм, композиция алгебр через on/onMatch в variantf позволяет делать расширяемый вычислитель)
источник

(

(λx.Me) Panda in PureScript — русскоговорящее сообщество
data Port
 = Port { port :: Int }

instance showPort :: Show Port where
 show (Port p) = show p

instance decodePort :: DecodeJson Port where
 decodeJson json = do
   obj <- decodeJson json
   port <- obj .: "port"
   pure $ Port { port }

getPort :: String -> Effect (Maybe Int)
getPort path = do
 txt <- readTextFile UTF8 path
 pure case decodeJson =<< jsonParser txt of
   (Left error) -> Nothing
   (Right (Port { port: n })) -> Just n


- если я читаю из файла config.json и там нет  { port: 8080 } то получаю Nothing, но, если отсутствует файл, то RuntimeException  происходит ( - как это лучше хендлить?
источник

(

(λx.Me) Panda in PureScript — русскоговорящее сообщество
Error: ENOENT: no such file or directory, open 'src/resources/configs.json'
   at Object.openSync (fs.js:443:3)

если точнее
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
через catch?
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
Не в тему, но не хотите бэкенд на хаскеле написать, вместо пурсы?)
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
Не в тему, но не хотите бэкенд на хаскеле написать, вместо пурсы?)
предложение на работу?)
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
Не, я просто увидел чтение файловой системы)
источник