-- | A special class of bounds for RNA/pair encodings that are used to index -- into tables. We typically encode more in the alphabets than we want to use -- to index, so in order to keep things simple, we have specialized bounds. module Biobase.RNA.NucBounds where import GHC.Tuple -- | 'minNormal' and 'maxNormal' encode for, say, ACGU; while 'minExtended' and -- 'maxExtended' would allow 'N' as well. See Biobase.RNA and -- Biobase.RNA.ViennaPair for instances. class Bounded a => NucBounds a where minNormal :: a maxNormal :: a minExtended :: a maxExtended :: a -- * Instances for tuples of size 2-6 instance (NucBounds a, NucBounds b) => NucBounds (a,b) where minNormal = (minNormal, minNormal) maxNormal = (maxNormal, maxNormal) minExtended = (minExtended, minExtended) maxExtended = (maxExtended, maxExtended) instance (NucBounds a, NucBounds b, NucBounds c) => NucBounds (a,b,c) where minNormal = (minNormal, minNormal, minNormal) maxNormal = (maxNormal, maxNormal, maxNormal) minExtended = (minExtended, minExtended, minExtended) maxExtended = (maxExtended, maxExtended, maxExtended) instance (NucBounds a, NucBounds b, NucBounds c, NucBounds d) => NucBounds (a,b,c,d) where minNormal = (minNormal, minNormal, minNormal, minNormal) maxNormal = (maxNormal, maxNormal, maxNormal, maxNormal) minExtended = (minExtended, minExtended, minExtended, minExtended) maxExtended = (maxExtended, maxExtended, maxExtended, maxExtended) instance (NucBounds a, NucBounds b, NucBounds c, NucBounds d, NucBounds e) => NucBounds (a,b,c,d,e) where minNormal = (minNormal, minNormal, minNormal, minNormal, minNormal) maxNormal = (maxNormal, maxNormal, maxNormal, maxNormal, maxNormal) minExtended = (minExtended, minExtended, minExtended, minExtended, minExtended) maxExtended = (maxExtended, maxExtended, maxExtended, maxExtended, maxExtended) instance (NucBounds a, NucBounds b, NucBounds c, NucBounds d, NucBounds e, NucBounds f) => NucBounds (a,b,c,d,e,f) where minNormal = (minNormal, minNormal, minNormal, minNormal, minNormal, minNormal) maxNormal = (maxNormal, maxNormal, maxNormal, maxNormal, maxNormal, maxNormal) minExtended = (minExtended, minExtended, minExtended, minExtended, minExtended, minExtended) maxExtended = (maxExtended, maxExtended, maxExtended, maxExtended, maxExtended, maxExtended)