В PureScript вам не нужно заранее определять такой тип записи. Polymorphi c версия:
mXY :: forall a b m. Apply m => m a -> m b -> m { x :: a, y :: b }
mXY foo bar = { x: _, y: _ } <$> foo <*> bar
-- | which can be rewritten using lift2:
mXY' = Control.Apply.lift2 { x: _, y: _ }
И эквивалент monomoprhi c:
type Foo = { x :: String, y :: String }
mFoo :: forall m. Apply m => m String -> m String -> m Foo
mFoo = Control.Apply.lift2 {x: _, y: _ }
«Живая демонстрация» с использованием замечательного try.purescript.org + пользовательская сущность:
https://try.purescript.org/?gist=a37f5f0c50e0640e34ea5a4788c0c999
Конечно, есть практическая ценность в использовании newtype
около Record
, например:
newtype Foo' = Foo' { x :: String, y :: String }
и в В таком случае я бы предложил что-то вроде:
mFoo'' foo bar = map Foo' $ { x: _ , y: _ } <$> foo <*> bar
, но я думаю, что это можно было бы выразить более элегантно и короче, чего я не знаю: -)