Module

Polyform.Input.Foreign

#FieldErr

type FieldErr = Variant (value :: MultipleErrors)

WARNING! It is still prototyping phase of this module.

#Field

type Field attrs err value = { value :: V err value | attrs }

#IntField

type IntField attrs = Field attrs FieldErr Int

#StringField

type StringField attrs = Field attrs FieldErr String

#NumberField

type NumberField attrs = Field attrs FieldErr Number

#ArrayField

type ArrayField attrs e val = Field attrs (Array e) (Array val)

Val is a self reference to an object

#Attrs

type Attrs val = Array (Attr val)

You should wrap this array into your constructors which represent some type of object.

#AttrErr

data AttrErr field

Attr wraps other field and attaches attribute name to it

Constructors

#Attr

data Attr field

Constructors

#attr

attr :: forall e field m v. Monad m => (e -> field) -> String -> Validation m e Foreign v -> Validation m (Array (Attr field)) Foreign v

You should define your fields using something like:

data MyField = IntField (IntField ()) | StringField (StringField ()) | NumberField (NumberField ()) | Object (Attrs MyField)

What is really imporant is that Attrs wrapper should be recursive.

#object

object :: forall field m v. Monad m => (Array (Attr field) -> field) -> Validation m (Array (Attr field)) Foreign v -> Validation m field Foreign v

#arrayFieldsValidation

arrayFieldsValidation :: forall e m v. Monad m => Validation m e Foreign v -> Validation m (Array e) (Array Foreign) (Array v)

#arrayValidation

arrayValidation :: forall t191 t194 t198 t236. Monad t198 => Validation t198 t194 Foreign t191 -> Validation t198 (Array (Variant (values :: Array t194, array :: MultipleErrors | t236))) Foreign (Array t191)

#intValidation

intValidation :: forall m err. Monad m => Validation m (Array (Variant (value :: MultipleErrors | err))) Foreign Int

#stringValidation

stringValidation :: forall m err. Monad m => Validation m (Array (Variant (value :: MultipleErrors | err))) Foreign String

Modules