p
var bar = function (v) {
return function (v1) {
return v.foo;
};
};
Size: a a a
p
var bar = function (v) {
return function (v1) {
return v.foo;
};
};
ЗП
p
ЗП
newtype YA p f a = YA (forall r. (forall b. p b a -> f b -> r) -> r)
toYA :: forall p f a b. p b a -> f b -> YA p f a
toYA pba fb = YA \f -> f pba fb
withYA :: forall p f a r. (forall b. p b a -> f b -> r) -> YA p f a -> r
withYA x (YA k) = k x
instance functorYA :: Profunctor p => Functor (YA p f) where
map f (YA fn) = YA (\gn -> fn (lcmap (rmap f) gn))
ЗП
type Coyoneda f a = YA (->) f aVY
routing-duplex
Lets say I have the following type describing query parameters:type TrackQuery =How can I define a route "codec" for the query type above?
{ genres ∷ Maybe (Array String)
}
"tracks?tags=genre1,genre2"
route = "tracks" / (record # _genres := ??? "tags")(продублировал из слака)
where
_genres = SProxy ∷ SProxy "genres"
VY
type TrackQuery =
{ genres ∷ Maybe (Array String)
}
route ∷ RouteDuplex' TrackQuery
route = path "tracks" (record # _genres := optional (many1 $ param "tags"))
where
_genres = SProxy ∷ SProxy "genres"
VY
params ... <> record ... сделать — не понятно, тк RouteDuplex не полугруппа, но я пока не знаю как сделать RouteParser a semigroupinstance semigroupRouteDuplex :: Semigroup (RouteDuplex i o) where
append (RouteDuplex i1 o1) (RouteDuplex i2 o2) = RouteDuplex (i1 <> i2) (o1 <> o2)
instance semigroupRouteParser ∷ RouteParser where
append (Chomp f) (Chomp g) = Chomp $ f <> g
... ?
VY
VY
(/) это pathrfoo ∷ RouteDuplex' { | AuthQuery + () }
foo = record # authenticated # paginatedVY
ЗП
VY
ЗП
hoistFreeT не правильныйЗП
ЗП
ЗП
instance mfunctorFreeT :: Functor f => MFunctor (FreeT f) where
hoist = hoistFreeT
λ