diff --git a/Biobase/Primary/AA.hs b/Biobase/Primary/AA.hs
--- a/Biobase/Primary/AA.hs
+++ b/Biobase/Primary/AA.hs
@@ -6,6 +6,7 @@
 module Biobase.Primary.AA where
 
 import           Control.Arrow ((***),first)
+import           Data.Aeson
 import           Data.Hashable
 import           Data.Ix (Ix(..))
 import           Data.Map.Strict (Map)
@@ -13,15 +14,17 @@
 import           Data.Tuple (swap)
 import           Data.Vector.Unboxed.Deriving
 import           GHC.Base (remInt,quotInt)
+import qualified GHC.Exts as GHC
 import           GHC.Generics (Generic)
+import qualified Data.Bijection.HashMap as B
 import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString.Lazy.Char8 as BSL
+import qualified Data.Foldable as F
 import qualified Data.Map.Strict as M
 import qualified Data.Text as T
 import qualified Data.Vector.Generic as VG
 import qualified Data.Vector.Generic.Mutable as VGM
 import qualified Data.Vector.Unboxed as VU
-import qualified Data.Bijection.Map as B
 
 import           Biobase.Primary.Letter
 
@@ -65,6 +68,19 @@
 
 aaRange = [Stop .. pred Undef]
 
+instance LetterChar AA where
+  letterChar = aaChar
+  charLetter = charAA
+
+instance ToJSON (Letter AA) where
+  toJSON = toJSON . letterChar
+
+instance FromJSON (Letter AA) where
+  parseJSON = fmap charLetter . parseJSON
+
+--instance (GHC.IsString f) => ToJSON (Pretty f (Letter AA)) where
+--  toJSON = toJSON . T.pack . map letterChar . GHC.toList . getPretty
+
 -- | Translate 'Char' amino acid representation into efficient 'AA' newtype.
 
 charAA :: Char -> Letter AA
@@ -79,7 +95,7 @@
 
 -- * lookup tables
 
-charBaa :: B.Bimap Char (Letter AA)
+charBaa :: B.Bimap (B.HashMap Char (Letter AA)) (B.HashMap (Letter AA) Char)
 charBaa = B.fromList
   [ ('*',Stop)
   , ('A',A)
diff --git a/Biobase/Primary/Letter.hs b/Biobase/Primary/Letter.hs
--- a/Biobase/Primary/Letter.hs
+++ b/Biobase/Primary/Letter.hs
@@ -34,12 +34,18 @@
 
 instance Binary    (Letter t)
 instance Serialize (Letter t)
-instance FromJSON  (Letter t)
-instance ToJSON    (Letter t)
 
 instance NFData (Letter t)
 
 type Primary t = VU.Vector (Letter t)
+
+-- | Convert 'Letter' types into character forms. @DNA@, @RNA@, and @amino
+-- acid@ sequences can make use of this. Other @Letter@ types only if they
+-- have single-char representations.
+
+class LetterChar t where
+  letterChar :: Letter t -> Char
+  charLetter :: Char -> Letter t
 
 -- | Conversion from a large number of sequence-like inputs to primary
 -- sequences.
diff --git a/Biobase/Primary/Nuc/DNA.hs b/Biobase/Primary/Nuc/DNA.hs
--- a/Biobase/Primary/Nuc/DNA.hs
+++ b/Biobase/Primary/Nuc/DNA.hs
@@ -1,6 +1,7 @@
 
 module Biobase.Primary.Nuc.DNA where
 
+import           Data.Aeson
 import           Data.Char (toUpper)
 import           Data.Ix (Ix(..))
 import           Data.Primitive.Types
@@ -41,6 +42,16 @@
     toEnum k                = error $ "toEnum/Letter DNA " ++ show k
     fromEnum (Letter k) = k
 
+instance LetterChar DNA where
+  letterChar = dnaChar
+  charLetter = charDNA
+
+instance (LetterChar DNA) => ToJSON (Primary DNA) where
+  toJSON = toJSON . VU.toList . VU.map letterChar
+
+instance (MkPrimary (VU.Vector Char) DNA) => FromJSON (Primary DNA) where
+  parseJSON = fmap (primary :: String -> Primary DNA) . parseJSON
+
 acgt :: [Letter DNA]
 acgt = [A .. T]
 
@@ -58,7 +69,7 @@
   G -> 'G'
   T -> 'T'
   N -> 'N'
-{-# INLINE dnaChar #-}            
+{-# INLINE dnaChar #-}
 
 instance Show (Letter DNA) where
     show c = [dnaChar c]
diff --git a/Biobase/Primary/Nuc/RNA.hs b/Biobase/Primary/Nuc/RNA.hs
--- a/Biobase/Primary/Nuc/RNA.hs
+++ b/Biobase/Primary/Nuc/RNA.hs
@@ -1,6 +1,7 @@
 
 module Biobase.Primary.Nuc.RNA where
 
+import           Data.Aeson
 import           Data.Char (toUpper)
 import           Data.Ix (Ix(..))
 import           Data.Primitive.Types
@@ -14,6 +15,7 @@
 import qualified Data.Vector.Generic.Mutable as VGM
 import qualified Data.Vector.Unboxed as VU
 import           Control.Category ((>>>))
+import qualified Data.ByteString.Builder as BB
 
 import           Biobase.Primary.Bounds
 import           Biobase.Primary.Letter
@@ -42,6 +44,27 @@
     toEnum k | k>=0 && k<=4 = Letter k
     toEnum k                = error $ "toEnum/Letter RNA " ++ show k
     fromEnum (Letter k) = k
+
+instance LetterChar RNA where
+  letterChar = rnaChar
+  charLetter = charRNA
+
+instance ToJSON (Letter RNA) where
+  toJSON = toJSON . letterChar
+
+instance FromJSON (Letter RNA) where
+  parseJSON = fmap charLetter . parseJSON
+
+-- We encode 'Primary RNA' directly as a string.
+--
+-- TODO we can't anymore, because this is not a newtype, just a type.
+
+--instance ToJSON (Primary RNA) where
+--  toJSON = toJSON . VU.toList . VU.map letterChar
+--
+--instance FromJSON (Primary RNA) where
+--  parseJSON = fmap (primary :: String -> Primary RNA) . parseJSON
+
 
 acgu :: [Letter RNA]
 acgu = [A .. U]
diff --git a/Biobase/Primary/Nuc/XNA.hs b/Biobase/Primary/Nuc/XNA.hs
--- a/Biobase/Primary/Nuc/XNA.hs
+++ b/Biobase/Primary/Nuc/XNA.hs
@@ -1,6 +1,7 @@
 
 module Biobase.Primary.Nuc.XNA where
 
+import           Data.Aeson
 import           Data.Char (toUpper)
 import           Data.Ix (Ix(..))
 import           Data.Primitive.Types
@@ -43,6 +44,16 @@
     toEnum k | k>=0 && k<=5 = Letter k
     toEnum k                = error $ "toEnum/Letter XNA " ++ show k
     fromEnum (Letter k) = k
+
+instance LetterChar XNA where
+  letterChar = xnaChar
+  charLetter = charXNA
+
+instance (LetterChar XNA) => ToJSON (Primary XNA) where
+  toJSON = toJSON . VU.toList . VU.map letterChar
+
+instance (MkPrimary (VU.Vector Char) XNA) => FromJSON (Primary XNA) where
+  parseJSON = fmap (primary :: String -> Primary XNA) . parseJSON
 
 charXNA = toUpper >>> \case
     'A' -> A
diff --git a/Biobase/Primary/Pretty.hs b/Biobase/Primary/Pretty.hs
new file mode 100644
--- /dev/null
+++ b/Biobase/Primary/Pretty.hs
@@ -0,0 +1,30 @@
+
+-- | Wrapper newtype to simplify pretty and short encoding of primary
+-- sequences.
+
+module Biobase.Primary.Pretty where
+
+import           Data.Aeson
+import qualified Data.Vector.Unboxed as VU
+import qualified Data.Vector as V
+import qualified Data.Vector.Storable as VS
+import qualified Data.Text as T
+
+import Biobase.Primary.Letter
+
+
+
+newtype Pretty f a = Pretty { getPretty :: f a }
+
+instance (LetterChar x) => ToJSON (Pretty VU.Vector (Letter x)) where
+  toJSON = String . T.pack . map letterChar . VU.toList . getPretty
+
+instance (LetterChar x) => ToJSON (Pretty V.Vector (Letter x)) where
+  toJSON = String . T.pack . map letterChar . V.toList . getPretty
+
+instance (LetterChar x, VS.Storable (Letter x)) => ToJSON (Pretty VS.Vector (Letter x)) where
+  toJSON = String . T.pack . map letterChar . VS.toList . getPretty
+
+instance (LetterChar x) => ToJSON (Pretty [] (Letter x)) where
+  toJSON = String . T.pack . map letterChar . getPretty
+
diff --git a/Biobase/Primary/Unknown.hs b/Biobase/Primary/Unknown.hs
--- a/Biobase/Primary/Unknown.hs
+++ b/Biobase/Primary/Unknown.hs
@@ -8,6 +8,7 @@
 
 module Biobase.Primary.Unknown where
 
+import           Data.Aeson
 import           Control.Applicative ((<$>))
 import           Control.Arrow ((***),first)
 import           Data.Hashable
@@ -69,4 +70,18 @@
 instance MkPrimary (VU.Vector Int) Unknown where
   primary = VU.map Letter
   {-# Inline primary #-}
+
+instance ToJSON (Letter Unknown) where
+  toJSON = toJSON . getLetter
+
+instance FromJSON (Letter Unknown) where
+  parseJSON = fmap Letter . parseJSON
+
+{-
+instance ToJSON (Primary Unknown) where
+  toJSON = toJSON . map (show . getLetter) . VU.toList
+
+instance FromJSON (Primary Unknown) where
+  parseJSON = fmap (VU.fromList . map (Letter . read)) . parseJSON
+-}
 
diff --git a/Biobase/Secondary/Diagrams.hs b/Biobase/Secondary/Diagrams.hs
--- a/Biobase/Secondary/Diagrams.hs
+++ b/Biobase/Secondary/Diagrams.hs
@@ -16,7 +16,7 @@
 import           Data.Tuple.Select (sel1,sel2)
 import           Data.Tuple (swap)
 import           Data.Vector.Binary
-import           Data.Vector.Cereal
+import           Data.Vector.Serialize
 import           GHC.Generics
 import qualified Data.Vector.Unboxed as VU
 import           Text.Printf
diff --git a/BiobaseXNA.cabal b/BiobaseXNA.cabal
--- a/BiobaseXNA.cabal
+++ b/BiobaseXNA.cabal
@@ -1,5 +1,5 @@
 name:           BiobaseXNA
-version:        0.9.2.1
+version:        0.9.3.0
 author:         Christian Hoener zu Siederdissen
 maintainer:     choener@bioinf.uni-leipzig.de
 homepage:       https://github.com/choener/BiobaseXNA
@@ -11,7 +11,7 @@
 license-file:   LICENSE
 build-type:     Simple
 stability:      experimental
-tested-with:    GHC == 7.8.4, GHC == 7.10.1
+tested-with:    GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1
 cabal-version:  >= 1.10.0
 description:
                 This is a base library for bioinformatics with emphasis on RNA
@@ -47,28 +47,29 @@
 
 
 library
-  build-depends: base                     >= 4.7      && < 4.9
-               , aeson                    >= 0.8      && < 0.11
-               , bimaps                   >= 0.0.0.2  && < 0.0.1.0
-               , binary                   >= 0.7      && < 0.8
-               , bytes                    >= 0.15     && < 0.16
-               , bytestring               >= 0.10     && < 0.11
-               , cereal                   >= 0.4      && < 0.5
-               , cereal-vector            >= 0.2      && < 0.3
-               , containers               >= 0.5      && < 0.6
-               , csv                      >= 0.1      && < 0.2
-               , deepseq                  >= 1.3      && < 1.5
-               , file-embed               >= 0.0.8    && < 0.0.10
-               , hashable                 >= 1.2      && < 1.3
-               , lens                     >= 4.0      && < 4.14
-               , primitive                >= 0.5      && < 0.7
-               , PrimitiveArray           >= 0.7.0    && < 0.7.1
-               , split                    >= 0.2      && < 0.3
-               , text                     >= 1.0      && < 1.3
-               , tuple                    >= 0.3      && < 0.4
-               , vector                   >= 0.10     && < 0.12
-               , vector-binary-instances  >= 0.2      && < 0.3
-               , vector-th-unbox          >= 0.2      && < 0.3
+  build-depends: base                     >= 4.7      &&  < 5.0
+               , aeson                    >= 0.8      &&  < 1.1
+               , binary                   >= 0.7      &&  < 0.8
+               , bytes                    >= 0.15     &&  < 0.16
+               , bytestring               >= 0.10     &&  < 0.11
+               , cereal                   >= 0.4      &&  < 0.6
+               , cereal-vector            >= 0.2      &&  < 0.3
+               , containers               >= 0.5      &&  < 0.6
+               , csv                      >= 0.1      &&  < 0.2
+               , deepseq                  >= 1.3      &&  < 1.5
+               , file-embed               >= 0.0.8    &&  < 0.1
+               , hashable                 >= 1.2      &&  < 1.3
+               , lens                     >= 4.0      &&  < 5.0
+               , primitive                >= 0.5      &&  < 0.7
+               , split                    >= 0.2      &&  < 0.3
+               , text                     >= 1.0      &&  < 1.3
+               , tuple                    >= 0.3      &&  < 0.4
+               , vector                   >= 0.10     &&  < 0.12
+               , vector-binary-instances  >= 0.2      &&  < 0.3
+               , vector-th-unbox          >= 0.2      &&  < 0.3
+               --
+               , bimaps                   == 0.1.0.*
+               , PrimitiveArray           == 0.7.1.*
   exposed-modules:
     Biobase.Primary
     Biobase.Primary.AA
@@ -81,6 +82,7 @@
     Biobase.Primary.Nuc.DNA
     Biobase.Primary.Nuc.RNA
     Biobase.Primary.Nuc.XNA
+    Biobase.Primary.Pretty
     Biobase.Primary.Trans
     Biobase.Primary.Unknown
     Biobase.Secondary
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,4 +1,10 @@
+0.9.3.0
+-------
+
+- bigger version bump together with multiple ghc compatibility
+
 0.9.2.1
+-------
 
 - stack.yaml, some version bumping
 
