summaryrefslogtreecommitdiff log msg author committer range
path: root/boost/hana/fwd/concat.hpp
blob: ed87f71ec1daaa126388ee9a9d9c6e0fe7f4027d (plain)
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 /*! @file Forward declares boost::hana::concat. @copyright Louis Dionne 2013-2016 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_HANA_FWD_CONCAT_HPP #define BOOST_HANA_FWD_CONCAT_HPP #include #include BOOST_HANA_NAMESPACE_BEGIN //! Combine two monadic structures together. //! @ingroup group-MonadPlus //! //! Given two monadic structures, concat combines them together and //! returns a new monadic structure. The exact definition of concat //! will depend on the exact model of MonadPlus at hand, but for //! sequences it corresponds intuitively to simple concatenation. //! //! Also note that combination is not required to be commutative. //! In other words, there is no requirement that //! @code //! concat(xs, ys) == concat(ys, xs) //! @endcode //! and indeed it does not hold in general. //! //! //! Signature //! --------- //! Given a MonadPlus M, the signature of concat is //! @f$\mathtt{concat} : M(T) \times M(T) \to M(T) @f$. //! //! @param xs, ys //! Two monadic structures to combine together. //! //! //! Example //! ------- //! @include example/concat.cpp #ifdef BOOST_HANA_DOXYGEN_INVOKED constexpr auto concat = [](auto&& xs, auto&& ys) { return tag-dispatched; }; #else template struct concat_impl : concat_impl> { }; struct concat_t { template constexpr auto operator()(Xs&& xs, Ys&& ys) const; }; constexpr concat_t concat{}; #endif BOOST_HANA_NAMESPACE_END #endif // !BOOST_HANA_FWD_CONCAT_HPP