| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
PlutusTx.Either
Documentation
The Either type represents values with two possibilities: a value of
type is either Either a b or Left a.Right b
The Either type is sometimes used to represent a value which is
either correct or an error; by convention, the Left constructor is
used to hold an error value and the Right constructor is used to
hold a correct value (mnemonic: "right" also means "correct").
Examples
The type is the type of values which can be either
a Either String IntString or an Int. The Left constructor can be used only on
Strings, and the Right constructor can be used only on Ints:
>>>let s = Left "foo" :: Either String Int>>>sLeft "foo">>>let n = Right 3 :: Either String Int>>>nRight 3>>>:type ss :: Either String Int>>>:type nn :: Either String Int
The fmap from our Functor instance will ignore Left values, but
will apply the supplied function to values contained in a Right:
>>>let s = Left "foo" :: Either String Int>>>let n = Right 3 :: Either String Int>>>fmap (*2) sLeft "foo">>>fmap (*2) nRight 6
The Monad instance for Either allows us to chain together multiple
actions which may fail, and fail overall if any of the individual
steps failed. First we'll write a function that can either parse an
Int from a Char, or fail.
>>>import Data.Char ( digitToInt, isDigit )>>>:{let parseEither :: Char -> Either String Int parseEither c | isDigit c = Right (digitToInt c) | otherwise = Left "parse error">>>:}
The following should work, since both '1' and '2' can be
parsed as Ints.
>>>:{let parseMultiple :: Either String Int parseMultiple = do x <- parseEither '1' y <- parseEither '2' return (x + y)>>>:}
>>>parseMultipleRight 3
But the following should fail overall, since the first operation where
we attempt to parse 'm' as an Int will fail:
>>>:{let parseMultiple :: Either String Int parseMultiple = do x <- parseEither 'm' y <- parseEither '2' return (x + y)>>>:}
>>>parseMultipleLeft "parse error"
Instances
| FromJSON2 Either | |
Defined in Data.Aeson.Types.FromJSON Methods liftParseJSON2 ∷ Maybe a → (Value → Parser a) → (Value → Parser [a]) → Maybe b → (Value → Parser b) → (Value → Parser [b]) → Value → Parser (Either a b) liftParseJSONList2 ∷ Maybe a → (Value → Parser a) → (Value → Parser [a]) → Maybe b → (Value → Parser b) → (Value → Parser [b]) → Value → Parser [Either a b] liftOmittedField2 ∷ Maybe a → Maybe b → Maybe (Either a b) | |
| ToJSON2 Either | |
Defined in Data.Aeson.Types.ToJSON Methods liftToJSON2 ∷ (a → Bool) → (a → Value) → ([a] → Value) → (b → Bool) → (b → Value) → ([b] → Value) → Either a b → Value liftToJSONList2 ∷ (a → Bool) → (a → Value) → ([a] → Value) → (b → Bool) → (b → Value) → ([b] → Value) → [Either a b] → Value liftToEncoding2 ∷ (a → Bool) → (a → Encoding) → ([a] → Encoding) → (b → Bool) → (b → Encoding) → ([b] → Encoding) → Either a b → Encoding liftToEncodingList2 ∷ (a → Bool) → (a → Encoding) → ([a] → Encoding) → (b → Bool) → (b → Encoding) → ([b] → Encoding) → [Either a b] → Encoding liftOmitField2 ∷ (a → Bool) → (b → Bool) → Either a b → Bool | |
| Bifunctor Either | Since: base-4.8.0.0 |
| NFData2 Either | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq | |
| Hashable2 Either | |
| Bitraversable1 Either | |
Defined in Data.Semigroup.Traversable.Class | |
| Generic1 (Either a ∷ Type → Type) | |
| MonadError e (Either e) | |
Defined in Control.Monad.Error.Class Methods throwError ∷ e → Either e a Source # catchError ∷ Either e a → (e → Either e a) → Either e a Source # | |
| (Typeable DefaultUni a, Typeable DefaultUni b, Lift DefaultUni a, Lift DefaultUni b) ⇒ Lift DefaultUni (Either a b) Source # | |
Defined in PlutusTx.Lift.Instances Methods lift ∷ Either a b → RTCompile DefaultUni fun (Term TyName Name DefaultUni fun ()) Source # | |
| (Lift a, Lift b) ⇒ Lift (Either a b ∷ Type) | |
| FromJSON a ⇒ FromJSON1 (Either a) | |
Defined in Data.Aeson.Types.FromJSON Methods liftParseJSON ∷ Maybe a0 → (Value → Parser a0) → (Value → Parser [a0]) → Value → Parser (Either a a0) liftParseJSONList ∷ Maybe a0 → (Value → Parser a0) → (Value → Parser [a0]) → Value → Parser [Either a a0] liftOmittedField ∷ Maybe a0 → Maybe (Either a a0) | |
| ToJSON a ⇒ ToJSON1 (Either a) | |
Defined in Data.Aeson.Types.ToJSON Methods liftToJSON ∷ (a0 → Bool) → (a0 → Value) → ([a0] → Value) → Either a a0 → Value liftToJSONList ∷ (a0 → Bool) → (a0 → Value) → ([a0] → Value) → [Either a a0] → Value liftToEncoding ∷ (a0 → Bool) → (a0 → Encoding) → ([a0] → Encoding) → Either a a0 → Encoding liftToEncodingList ∷ (a0 → Bool) → (a0 → Encoding) → ([a0] → Encoding) → [Either a a0] → Encoding liftOmitField ∷ (a0 → Bool) → Either a a0 → Bool | |
| Foldable (Either a) | Since: base-4.7.0.0 |
Defined in Data.Foldable Methods fold ∷ Monoid m ⇒ Either a m → m Source # foldMap ∷ Monoid m ⇒ (a0 → m) → Either a a0 → m Source # foldMap' ∷ Monoid m ⇒ (a0 → m) → Either a a0 → m Source # foldr ∷ (a0 → b → b) → b → Either a a0 → b Source # foldr' ∷ (a0 → b → b) → b → Either a a0 → b Source # foldl ∷ (b → a0 → b) → b → Either a a0 → b Source # foldl' ∷ (b → a0 → b) → b → Either a a0 → b Source # foldr1 ∷ (a0 → a0 → a0) → Either a a0 → a0 Source # foldl1 ∷ (a0 → a0 → a0) → Either a a0 → a0 Source # toList ∷ Either a a0 → [a0] Source # null ∷ Either a a0 → Bool Source # length ∷ Either a a0 → Int Source # elem ∷ Eq a0 ⇒ a0 → Either a a0 → Bool Source # maximum ∷ Ord a0 ⇒ Either a a0 → a0 Source # minimum ∷ Ord a0 ⇒ Either a a0 → a0 Source # | |
| Traversable (Either a) | Since: base-4.7.0.0 |
Defined in Data.Traversable | |
| Applicative (Either e) | Since: base-3.0 |
| Functor (Either a) | Since: base-3.0 |
| Monad (Either e) | Since: base-4.4.0.0 |
| MonadFailure (Either a) | |
Defined in Basement.Monad Associated Types type Failure (Either a) | |
| NFData a ⇒ NFData1 (Either a) | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq | |
| Hashable a ⇒ Hashable1 (Either a) | |
Defined in Data.Hashable.Class | |
| Applicative (Either a) Source # | |
| Foldable (Either c) Source # | |
Defined in PlutusTx.Foldable | |
| Functor (Either c) Source # | |
| Traversable (Either c) Source # | |
Defined in PlutusTx.Traversable | |
| MonadBaseControl (Either e) (Either e) | |
Defined in Control.Monad.Trans.Control Associated Types type StM (Either e) a | |
| (FromJSON a, FromJSON b) ⇒ FromJSON (Either a b) | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON ∷ Value → Parser (Either a b) parseJSONList ∷ Value → Parser [Either a b] omittedField ∷ Maybe (Either a b) | |
| (ToJSON a, ToJSON b) ⇒ ToJSON (Either a b) | |
Defined in Data.Aeson.Types.ToJSON Methods toEncoding ∷ Either a b → Encoding toJSONList ∷ [Either a b] → Value toEncodingList ∷ [Either a b] → Encoding | |
| (Data a, Data b) ⇒ Data (Either a b) | Since: base-4.0.0.0 |
Defined in Data.Data Methods gfoldl ∷ (∀ d b0. Data d ⇒ c (d → b0) → d → c b0) → (∀ g. g → c g) → Either a b → c (Either a b) Source # gunfold ∷ (∀ b0 r. Data b0 ⇒ c (b0 → r) → c r) → (∀ r. r → c r) → Constr → c (Either a b) Source # toConstr ∷ Either a b → Constr Source # dataTypeOf ∷ Either a b → DataType Source # dataCast1 ∷ Typeable t ⇒ (∀ d. Data d ⇒ c (t d)) → Maybe (c (Either a b)) Source # dataCast2 ∷ Typeable t ⇒ (∀ d e. (Data d, Data e) ⇒ c (t d e)) → Maybe (c (Either a b)) Source # gmapT ∷ (∀ b0. Data b0 ⇒ b0 → b0) → Either a b → Either a b Source # gmapQl ∷ (r → r' → r) → r → (∀ d. Data d ⇒ d → r') → Either a b → r Source # gmapQr ∷ ∀ r r'. (r' → r → r) → r → (∀ d. Data d ⇒ d → r') → Either a b → r Source # gmapQ ∷ (∀ d. Data d ⇒ d → u) → Either a b → [u] Source # gmapQi ∷ Int → (∀ d. Data d ⇒ d → u) → Either a b → u Source # gmapM ∷ Monad m ⇒ (∀ d. Data d ⇒ d → m d) → Either a b → m (Either a b) Source # gmapMp ∷ MonadPlus m ⇒ (∀ d. Data d ⇒ d → m d) → Either a b → m (Either a b) Source # gmapMo ∷ MonadPlus m ⇒ (∀ d. Data d ⇒ d → m d) → Either a b → m (Either a b) Source # | |
| Semigroup (Either a b) | Since: base-4.9.0.0 |
| Generic (Either a b) | |
| (Read a, Read b) ⇒ Read (Either a b) | Since: base-3.0 |
| (Show a, Show b) ⇒ Show (Either a b) | Since: base-3.0 |
| (NFData a, NFData b) ⇒ NFData (Either a b) | |
Defined in Control.DeepSeq | |
| (Eq a, Eq b) ⇒ Eq (Either a b) | Since: base-2.1 |
| (Ord a, Ord b) ⇒ Ord (Either a b) | Since: base-2.1 |
Defined in Data.Either | |
| (Hashable a, Hashable b) ⇒ Hashable (Either a b) | |
| MonoFoldable (Either a b) | |
Defined in Data.MonoTraversable Methods ofoldMap ∷ Monoid m ⇒ (Element (Either a b) → m) → Either a b → m Source # ofoldr ∷ (Element (Either a b) → b0 → b0) → b0 → Either a b → b0 Source # ofoldl' ∷ (a0 → Element (Either a b) → a0) → a0 → Either a b → a0 Source # otoList ∷ Either a b → [Element (Either a b)] Source # oall ∷ (Element (Either a b) → Bool) → Either a b → Bool Source # oany ∷ (Element (Either a b) → Bool) → Either a b → Bool Source # onull ∷ Either a b → Bool Source # olength ∷ Either a b → Int Source # olength64 ∷ Either a b → Int64 Source # ocompareLength ∷ Integral i ⇒ Either a b → i → Ordering Source # otraverse_ ∷ Applicative f ⇒ (Element (Either a b) → f b0) → Either a b → f () Source # ofor_ ∷ Applicative f ⇒ Either a b → (Element (Either a b) → f b0) → f () Source # omapM_ ∷ Applicative m ⇒ (Element (Either a b) → m ()) → Either a b → m () Source # oforM_ ∷ Applicative m ⇒ Either a b → (Element (Either a b) → m ()) → m () Source # ofoldlM ∷ Monad m ⇒ (a0 → Element (Either a b) → m a0) → a0 → Either a b → m a0 Source # ofoldMap1Ex ∷ Semigroup m ⇒ (Element (Either a b) → m) → Either a b → m Source # ofoldr1Ex ∷ (Element (Either a b) → Element (Either a b) → Element (Either a b)) → Either a b → Element (Either a b) Source # ofoldl1Ex' ∷ (Element (Either a b) → Element (Either a b) → Element (Either a b)) → Either a b → Element (Either a b) Source # headEx ∷ Either a b → Element (Either a b) Source # lastEx ∷ Either a b → Element (Either a b) Source # unsafeHead ∷ Either a b → Element (Either a b) Source # unsafeLast ∷ Either a b → Element (Either a b) Source # maximumByEx ∷ (Element (Either a b) → Element (Either a b) → Ordering) → Either a b → Element (Either a b) Source # minimumByEx ∷ (Element (Either a b) → Element (Either a b) → Ordering) → Either a b → Element (Either a b) Source # oelem ∷ Element (Either a b) → Either a b → Bool Source # onotElem ∷ Element (Either a b) → Either a b → Bool Source # | |
| MonoFunctor (Either a b) | |
| MonoPointed (Either a b) | |
| MonoTraversable (Either a b) | |
| (Eq a, Eq b) ⇒ Eq (Either a b) Source # | |
| (FromData a, FromData b) ⇒ FromData (Either a b) Source # | |
Defined in PlutusTx.IsData.Instances Methods fromBuiltinData ∷ BuiltinData → Maybe (Either a b) Source # | |
| (ToData a, ToData b) ⇒ ToData (Either a b) Source # | |
Defined in PlutusTx.IsData.Instances Methods toBuiltinData ∷ Either a b → BuiltinData Source # | |
| (UnsafeFromData a, UnsafeFromData b) ⇒ UnsafeFromData (Either a b) Source # | |
Defined in PlutusTx.IsData.Instances Methods unsafeFromBuiltinData ∷ BuiltinData → Either a b Source # | |
| (Ord a, Ord b) ⇒ Ord (Either a b) Source # | |
Defined in PlutusTx.Ord | |
| (Show a, Show b) ⇒ Show (Either a b) Source # | |
| (Finite a, Uniform a, Finite b, Uniform b) ⇒ Uniform (Either a b) | |
Defined in System.Random.Internal Methods uniformM ∷ StatefulGen g m ⇒ g → m (Either a b) Source # | |
| Corecursive (Either a b) | |
Defined in Data.Functor.Foldable Methods embed ∷ Base (Either a b) (Either a b) → Either a b Source # ana ∷ (a0 → Base (Either a b) a0) → a0 → Either a b Source # apo ∷ (a0 → Base (Either a b) (Either (Either a b) a0)) → a0 → Either a b Source # postpro ∷ Recursive (Either a b) ⇒ (∀ b0. Base (Either a b) b0 → Base (Either a b) b0) → (a0 → Base (Either a b) a0) → a0 → Either a b Source # gpostpro ∷ (Recursive (Either a b), Monad m) ⇒ (∀ b0. m (Base (Either a b) b0) → Base (Either a b) (m b0)) → (∀ c. Base (Either a b) c → Base (Either a b) c) → (a0 → Base (Either a b) (m a0)) → a0 → Either a b Source # | |
| Recursive (Either a b) | |
Defined in Data.Functor.Foldable Methods project ∷ Either a b → Base (Either a b) (Either a b) Source # cata ∷ (Base (Either a b) a0 → a0) → Either a b → a0 Source # para ∷ (Base (Either a b) (Either a b, a0) → a0) → Either a b → a0 Source # gpara ∷ (Corecursive (Either a b), Comonad w) ⇒ (∀ b0. Base (Either a b) (w b0) → w (Base (Either a b) b0)) → (Base (Either a b) (EnvT (Either a b) w a0) → a0) → Either a b → a0 Source # prepro ∷ Corecursive (Either a b) ⇒ (∀ b0. Base (Either a b) b0 → Base (Either a b) b0) → (Base (Either a b) a0 → a0) → Either a b → a0 Source # gprepro ∷ (Corecursive (Either a b), Comonad w) ⇒ (∀ b0. Base (Either a b) (w b0) → w (Base (Either a b) b0)) → (∀ c. Base (Either a b) c → Base (Either a b) c) → (Base (Either a b) (w a0) → a0) → Either a b → a0 Source # | |
| (Serialise a, Serialise b) ⇒ Serialise (Either a b) | Since: serialise-0.2.0.0 |
| (HasBlueprintDefinition a, HasSchemaDefinition a referencedTypes, HasBlueprintDefinition b, HasSchemaDefinition b referencedTypes) ⇒ HasBlueprintSchema (Either a b) referencedTypes Source # | |
Defined in PlutusTx.IsData.Instances | |
| Typeable DefaultUni Either Source # | |
Defined in PlutusTx.Lift.Instances Methods typeRep ∷ Proxy Either → RTCompile DefaultUni fun (Type TyName DefaultUni ()) Source # | |
| (a ~ a', b ~ b') ⇒ Each (Either a a') (Either b b') a b | |
Defined in Control.Lens.Each | |
| (a ~ a', b ~ b') ⇒ Each (Either a a') (Either b b') a b | Since: microlens-0.4.11 |
| (FoldableWithIndex i f, FoldableWithIndex j g) ⇒ FoldableWithIndex (Either i j) (Product f g) | |
Defined in WithIndex Methods ifoldMap ∷ Monoid m ⇒ (Either i j → a → m) → Product f g a → m ifoldMap' ∷ Monoid m ⇒ (Either i j → a → m) → Product f g a → m ifoldr ∷ (Either i j → a → b → b) → b → Product f g a → b ifoldl ∷ (Either i j → b → a → b) → b → Product f g a → b | |
| (FoldableWithIndex i f, FoldableWithIndex j g) ⇒ FoldableWithIndex (Either i j) (Sum f g) | |
Defined in WithIndex | |
| (FoldableWithIndex i f, FoldableWithIndex j g) ⇒ FoldableWithIndex (Either i j) (f :*: g) | |
Defined in WithIndex | |
| (FoldableWithIndex i f, FoldableWithIndex j g) ⇒ FoldableWithIndex (Either i j) (f :+: g) | |
Defined in WithIndex | |
| (FunctorWithIndex i f, FunctorWithIndex j g) ⇒ FunctorWithIndex (Either i j) (Product f g) | |
| (FunctorWithIndex i f, FunctorWithIndex j g) ⇒ FunctorWithIndex (Either i j) (Sum f g) | |
| (FunctorWithIndex i f, FunctorWithIndex j g) ⇒ FunctorWithIndex (Either i j) (f :*: g) | |
| (FunctorWithIndex i f, FunctorWithIndex j g) ⇒ FunctorWithIndex (Either i j) (f :+: g) | |
| (TraversableWithIndex i f, TraversableWithIndex j g) ⇒ TraversableWithIndex (Either i j) (Product f g) | |
| (TraversableWithIndex i f, TraversableWithIndex j g) ⇒ TraversableWithIndex (Either i j) (Sum f g) | |
| (TraversableWithIndex i f, TraversableWithIndex j g) ⇒ TraversableWithIndex (Either i j) (f :*: g) | |
| (TraversableWithIndex i f, TraversableWithIndex j g) ⇒ TraversableWithIndex (Either i j) (f :+: g) | |
| type Rep1 (Either a ∷ Type → Type) | Since: base-4.6.0.0 |
Defined in GHC.Generics type Rep1 (Either a ∷ Type → Type) = D1 ('MetaData "Either" "Data.Either" "base" 'False) (C1 ('MetaCons "Left" 'PrefixI 'False) (S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: C1 ('MetaCons "Right" 'PrefixI 'False) (S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) | |
| type Failure (Either a) | |
Defined in Basement.Monad type Failure (Either a) = a | |
| type StM (Either e) a | |
Defined in Control.Monad.Trans.Control type StM (Either e) a = a | |
| type Rep (Either a b) | Since: base-4.6.0.0 |
Defined in GHC.Generics type Rep (Either a b) = D1 ('MetaData "Either" "Data.Either" "base" 'False) (C1 ('MetaCons "Left" 'PrefixI 'False) (S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: C1 ('MetaCons "Right" 'PrefixI 'False) (S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b))) | |
| type Element (Either a b) | |
Defined in Data.MonoTraversable | |
| type Base (Either a b) | Example boring stub for non-recursive data types |