Skip to content

Instantly share code, notes, and snippets.

@chexxor
Created April 25, 2018 21:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chexxor/5b491d55ea9187cd1020d034818711e5 to your computer and use it in GitHub Desktop.
Save chexxor/5b491d55ea9187cd1020d034818711e5 to your computer and use it in GitHub Desktop.
HomoHKTRow.purs
module Main where
import Prelude
import Control.Monad.Eff.Console (log)
import TryPureScript (render, withConsole)
import Type.Row
class HomoHKTRow (rs :: RowList) (f :: Type -> Type)
instance allFoosNil :: HomoHKTRow Nil f
instance allFoosCons :: (HomoHKTRow t f) => HomoHKTRow (Cons l (f h) t) f
data Foo a = Foo a
class FooRecord a
instance foozA :: (RowToList r rl, HomoHKTRow rl Foo) => FooRecord (Record r)
allFoos :: forall r. FooRecord r => r -> Unit
allFoos _ = unit
-- or without the `FooRecord` class
allFoos' :: forall r rl.
RowToList r rl =>
HomoHKTRow rl Foo =>
(Record r) -> Unit
allFoos' _ = unit
demo :: Unit
demo = allFoos { x: Foo 3, y: Foo "test" }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment