Skip to content

Instantly share code, notes, and snippets.

View cryogenian's full-sized avatar

Maksim Zimaliev cryogenian

  • Yerevan, Armenia
View GitHub Profile
module Button where
import Prelude
import Data.Maybe (Maybe(..))
import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Events as HE
import Halogen.HTML.Properties as HP
type State = Boolean
module Main where
import Prelude
import Control.Monad.Aff (launchAff, delay, forkAff)
import Control.Monad.Eff.Class (liftEff)
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Ref (REF, newRef, writeRef, readRef)
import Control.Monad.Eff.Console (CONSOLE, log)
import CSS (fromString)
class GetLabelType (rl ∷ RowList) (s ∷ Symbol) (a ∷ Type) | rl s → a where
labelType ∷ RLProxy rl → SProxy s → Proxy a
instance getLabelTypeFound ∷ GetLabelType (Cons s a tail) s a where
labelType _ _ = Proxy
else instance getLabelTypeNotFound ∷ GetLabelType (Cons s a tail) s Void where
labelType _ _ = Proxy
else instance getLabelTypeInd ∷ GetLabelType tail ss b ⇒ GetLabelType (Cons s a tail) ss b where
labelType _ _ = labelType (RLProxy ∷ RLProxy tail) (SProxy ∷ SProxy ss)
else instance getLabelTypeVoid ∷ GetLabelType Nil s Void where

DSl'и и как писать большие программы на PureScript'е

Вступление

Приветы! Меня зовут Максим Зималиев, я работаю в SlamData и уже почти два с половиной года пилю в продакшн код на PureScript'е. Как и большинство пришедших в прекрасный мир ФП, я начинал со всяких там джаваскриптов, пхп и шарпов. Соответственно, у меня есть бывшие коллеги и друзья, которые по-прежнему работают на императивных языках, используют GoF, DDD и тому подобное.

Ну так вот, пойдешь такой пиво пить, и внезапно "Слушай, а как у вас в PureScript'е, например ORM запилить, объектов же нет?" Или: "Это здорово всё, но вот я домены описываю вот так вот, у них там поведение есть, а как это PureScript'е сделать?"

newtype HalogenM s (f :: * -> *) g p o m a = HalogenM (Free (HalogenF s f g p o m) a)
data HalogenR (r ∷ # *) a
class RowEquals (a ∷ # *) (b ∷ # *) | a → b, b → a where
toR ∷ ∀ p. p a → p b
fromR ∷ ∀ p. p b → p a
instance refl ∷ RowEquals r r where
@cryogenian
cryogenian / Main.purs
Created June 27, 2016 10:38
Argonaut example
module Main where
import Prelude
import Control.Alt ((<|>))
import Control.Monad.Aff (launchAff)
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Exception (EXCEPTION)
module Test.Main where
import Control.Alt ((<|>))
import Control.Monad.Aff (Aff(), runAff)
import Control.Monad.Eff (Eff())
import Control.Monad.Eff.Exception (EXCEPTION(), throwException)
import Control.Monad.Free
import DOM.HTML.Types (HTMLElement())
import Data.Functor (($>))
import Data.Functor.Coproduct (Coproduct(), left, right)
module Main where
import Prelude
import Control.Apply ((*>))
import Data.Either (Either(..), either)
import Control.Monad.Eff (Eff())
import Control.Monad.Eff.Console (log, error, CONSOLE())
import Unsafe.Coerce (unsafeCoerce)
import Text.Chalk
module FileSystem where
import Prelude
import Control.Monad.Aff (runAff, forkAff, Aff())
import Control.Monad.Aff.AVar (makeVar)
import Control.Monad.Eff (Eff())
import Control.Monad.Eff.Class (liftEff)
import Control.Monad.Eff.Exception (throwException, EXCEPTION())
import Control.UI.Browser (setLocation)
@cryogenian
cryogenian / gist:7a3e874f4df67265bdad
Created July 16, 2015 01:48
echarts interpreters
module Test.Main where
import Prelude
import Data.Maybe
import Data.Either (either)
import Control.Monad.Eff (Eff())
import Control.Monad.Eff.Console (log)
import Control.Monad.Writer
import Control.Monad.Writer.Trans
import Control.Monad.Writer.Class