capydi
Loading...
Searching...
No Matches
Maybe.hpp
Go to the documentation of this file.
1#ifndef NONE_HPP_
2#define NONE_HPP_
3
5
6namespace capy::meta
7{
8
10{
11 struct Nil {};
12}
13
14template<typename T>
15struct Maybe;
16
18
19template<typename T>
20 requires (!std::same_as<implementation_details_::Nil, T>)
21using Some = Maybe<T>;
22
23template<typename T>
24struct Maybe
25{
26 static constexpr bool HAS_VALUE = true;
27
28 using Value = T;
29
30 template<t_trait<MetaArity::N1> Mapper>
32
33 template<v_trait<MetaArity::N1> Predicate>
34 using Filter = std::conditional_t<
36 Some<T>,
37 None
38 >;
39
40 template<t_trait<MetaArity::N1> Mapper>
42
43 template<typename OtherValue>
44 using Or = Maybe<T>;
45};
46
47template<>
49{
50 static constexpr bool HAS_VALUE = false;
51
53
54 template<t_trait<MetaArity::N1> Mapper>
55 using Map = None;
56
57 template<v_trait<MetaArity::N1> Predicate>
58 using Filter = None;
59
60 template<t_trait<MetaArity::N1> Mapper>
61 using AndThen = None;
62
63 template<typename OtherValue>
65};
66
67}
68
69#endif // NONE_HPP_
Definition Rebind.hpp:7
typename implementation_details_::functor_call_t< MetaFunctor, Args... >::type call_t
Definition Trait.hpp:74
constexpr auto call_v
Definition Trait.hpp:78
Maybe< implementation_details_::Nil > None
Definition Maybe.hpp:17
Maybe< T > Some
Definition Maybe.hpp:21
static constexpr bool HAS_VALUE
Definition Maybe.hpp:50
Maybe< OtherValue > Or
Definition Maybe.hpp:64
implementation_details_::Nil Value
Definition Maybe.hpp:52
Definition Maybe.hpp:25
T Value
Definition Maybe.hpp:28
call_t< Mapper, T > AndThen
Definition Maybe.hpp:41
static constexpr bool HAS_VALUE
Definition Maybe.hpp:26
Maybe< call_t< Mapper, T > > Map
Definition Maybe.hpp:31
std::conditional_t< call_v< Predicate, T >, Some< T >, None > Filter
Definition Maybe.hpp:34
Maybe< T > Or
Definition Maybe.hpp:44