/*!
* @concept SegmentableConcept
*
* @headerfile <seqan/sequence.h>
*
* @brief A concept for sequences that can be used as the host of a @link
* Segment segment @endlink.
* @brief Returns prefix type in a infix fashion.
*
* @signature concept Segmentable;
*
* @mfn SegmentableConcept#Prefix
*
* @brief Return prefix type in a flattening fashion.
*
* @signature Prefix<TSeq>::Type
*
* @tparam TSeq The segmentable sequence type to get prefix type for.
*
* @return Type The prefix type.
*
* The prefix type of a prefix is a suffix, the prefix of any other segment type
* is an infix.
*
* @mfn SegmentableConcept#Infix
*
* @brief Returns infix type in a flattening fashion.
*
* @signature Infix<TSeq>::Type
*
* @tparam TSeq The segmentable sequence type to get infix type for.
*
* @return Type The infix type.
*
* The infix any segment is an infix.
*
* @mfn SegmentableConcept#Suffix
*
* @brief Returns suffix type in a flattening fashion.
*
* @signature Suffix<TSeq>::Type
*
* @tparam TSeq The segmentable sequence type to get suffix type for.
*
* @return Type The suffix type.
*
* The suffix type of a suffix is a suffix, the suffix of any other segment type
* is an infix.
*
* @fn SegmentableConcept#prefix
*
* @brief Returns the prefix of a Segmentable type.
*
* @signature TPrefix prefix(s, endPos);
*
* @param[in] s Segmentable sequence to return the prefix for (type
* <tt>TSeq</tt>).
* @param[in] endPos End position must be convertible to
* <tt>Position<TSeq>::Type</tt>.
*
* @return TPrefix The prefix of length <tt>endPos</tt>. Type as returned by
* @link SegmentableConcept#Prefix @endlink for TSeq.
*
* @fn SegmentableConcept#infixWithLength
*
* @brief Returns the infix of a Segmentable type.
*
* @signature TInfix infixWithLength(s, beginPos, len);
*
* @param[in] s Segmentable sequence to return the infix for (type
* <tt>TSeq</tt>).
* @param[in] beginPos Begin position must be convertible to
* <tt>Position<TSeq>::Type</tt>.
* @param[in] len Length of the prefix, must be convertible to
* <tt>Size<TSeq>::Type</tt>.
*
* Equivalent to <tt>infix(s, beginPos, beginPos + len)</tt>.
*
* @fn SegmentableConcept#infix
*
* @brief Returns the infix of a Segmentable type.
*
* @signature TInfix infix(s, beginPos, endPos);
*
* @param[in] s Segmentable sequence to return the infix for (type
* <tt>TSeq</tt>).
* @param[in] beginPos Begin position must be convertible to
* <tt>Position<TSeq>::Type</tt>.
* @param[in] endPos End position must be convertible to
* <tt>Position<TSeq>::Type</tt>.
*
* @fn SegmentableConcept#suffix
*
* @brief Returns the suffix of a Segmentable type.
*
* @signature TSuffix suffix(s, beginPos);
*
* @param[in] s The segmentable type to get the suffix of.
* @param[in] beginPos Begin position must be convertible to
* <tt>Position<TSeq>::Type</tt>.
*
* @return TSuffix The suffix type as returned by @link
* SegmentableConcept#Suffix @endlink.
*/