diff --git a/BootTidal.hs b/BootTidal.hs
--- a/BootTidal.hs
+++ b/BootTidal.hs
@@ -1,6 +1,5 @@
 :set -XOverloadedStrings
 :set prompt ""
-:set prompt-cont ""
 
 import Sound.Tidal.Context
 
@@ -43,14 +42,14 @@
     anticipate i = transition tidal True (Sound.Tidal.Transition.anticipate) i
     anticipateIn i t = transition tidal True (Sound.Tidal.Transition.anticipateIn t) i
     forId i t = transition tidal False (Sound.Tidal.Transition.mortalOverlay t) i
-    d1 = p 1 . (|< orbit 0) 
-    d2 = p 2 . (|< orbit 1) 
-    d3 = p 3 . (|< orbit 2) 
-    d4 = p 4 . (|< orbit 3) 
-    d5 = p 5 . (|< orbit 4) 
-    d6 = p 6 . (|< orbit 5) 
-    d7 = p 7 . (|< orbit 6) 
-    d8 = p 8 . (|< orbit 7) 
+    d1 = p 1 . (|< orbit 0)
+    d2 = p 2 . (|< orbit 1)
+    d3 = p 3 . (|< orbit 2)
+    d4 = p 4 . (|< orbit 3)
+    d5 = p 5 . (|< orbit 4)
+    d6 = p 6 . (|< orbit 5)
+    d7 = p 7 . (|< orbit 6)
+    d8 = p 8 . (|< orbit 7)
     d9 = p 9 . (|< orbit 8)
     d10 = p 10 . (|< orbit 9)
     d11 = p 11 . (|< orbit 10)
@@ -70,3 +69,4 @@
 :}
 
 :set prompt "tidal> "
+:set prompt-cont ""
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # TidalCycles log of changes
 
+## 1.4.8 - Limerick
+        * Add ratio shorthand to floating point patterns @yaxu
+        * Support fractional scales, add Arabic scales @quakehead
+        * Additions to tidal-parse including support from overgain, overshape adn rot @dktr0
+        * Move prompt-cont setting to end of BootTidal.hs (older versions of Haskell crash out at this point) @ndr-brt
 ## 1.4.7 - Bleep
 
 	* Fix BootTidal.hs - make loadable in atom @bgold-cosmos
diff --git a/src/Sound/Tidal/ParseBP.hs b/src/Sound/Tidal/ParseBP.hs
--- a/src/Sound/Tidal/ParseBP.hs
+++ b/src/Sound/Tidal/ParseBP.hs
@@ -348,7 +348,9 @@
                       <|>
                          do c <- parseChord
                             return $ TPat_Stack $ map (TPat_Atom Nothing) c
-
+                      <|>
+                         do r <- pRatioChar
+                            return $ TPat_Atom Nothing r
 
 pBool :: MyParser (TPat Bool)
 pBool = wrapPos $ do oneOf "t1"
@@ -470,21 +472,23 @@
                          return (toRational ((read $ show n ++ "." ++ frac)  :: Double))
                       <|>
                       return (n%1)
-            c <- (ratioChar <|> return 1)
+            c <- (pRatioChar <|> return 1)
             return $ applySign s (result * c)
-         <|> ratioChar
-  where ratioChar = do char 'h'
-                       return $ 1%2
-                    <|> do char 'q'
-                           return $ 1%4
-                    <|> do char 'e'
-                           return $ 1%8
-                    <|> do char 's'
-                           return $ 1%16
-                    <|> do char 't'
-                           return $ 1%3
-                    <|> do char 'f'
-                           return $ 1%5
+         <|> pRatioChar
+
+pRatioChar :: Fractional a => MyParser a
+pRatioChar = do char 'h'
+                return $ 0.5
+             <|> do char 'q'
+                    return $ 0.25
+             <|> do char 'e'
+                    return $ 0.125
+             <|> do char 's'
+                    return $ 0.625
+             <|> do char 't'
+                    return $ 1/3
+             <|> do char 'f'
+                    return $ 0.25
 
 pRational :: MyParser (TPat Rational)
 pRational = wrapPos $ (TPat_Atom Nothing) <$> pRatio
diff --git a/src/Sound/Tidal/Scales.hs b/src/Sound/Tidal/Scales.hs
--- a/src/Sound/Tidal/Scales.hs
+++ b/src/Sound/Tidal/Scales.hs
@@ -1,186 +1,201 @@
 module Sound.Tidal.Scales (scale, scaleList, scaleTable, getScale) where
 
+import Prelude hiding ((<*), (*>))
 import Data.Maybe
-
 import Sound.Tidal.Pattern
 import Sound.Tidal.Utils
 
 -- five notes scales
-minPent :: Num a => [a]
+minPent :: Fractional a => [a]
 minPent = [0,3,5,7,10]
-majPent :: Num a => [a]
+majPent :: Fractional a => [a]
 majPent = [0,2,4,7,9]
 
 --  another mode of major pentatonic
-ritusen :: Num a => [a]
+ritusen :: Fractional a => [a]
 ritusen = [0,2,5,7,9]
 
 -- another mode of major pentatonic
-egyptian :: Num a => [a]
+egyptian :: Fractional a => [a]
 egyptian = [0,2,5,7,10]
 
 --
-kumai :: Num a => [a]
+kumai :: Fractional a => [a]
 kumai = [0,2,3,7,9]
-hirajoshi :: Num a => [a]
+hirajoshi :: Fractional a => [a]
 hirajoshi = [0,2,3,7,8]
-iwato :: Num a => [a]
+iwato :: Fractional a => [a]
 iwato = [0,1,5,6,10]
-chinese :: Num a => [a]
+chinese :: Fractional a => [a]
 chinese = [0,4,6,7,11]
-indian :: Num a => [a]
+indian :: Fractional a => [a]
 indian = [0,4,5,7,10]
-pelog :: Num a => [a]
+pelog :: Fractional a => [a]
 pelog = [0,1,3,7,8]
 
 --
-prometheus :: Num a => [a]
+prometheus :: Fractional a => [a]
 prometheus = [0,2,4,6,11]
-scriabin :: Num a => [a]
+scriabin :: Fractional a => [a]
 scriabin = [0,1,4,7,9]
 
 -- han chinese pentatonic scales
-gong :: Num a => [a]
+gong :: Fractional a => [a]
 gong = [0,2,4,7,9]
-shang :: Num a => [a]
+shang :: Fractional a => [a]
 shang = [0,2,5,7,10]
-jiao :: Num a => [a]
+jiao :: Fractional a => [a]
 jiao = [0,3,5,8,10]
-zhi :: Num a => [a]
+zhi :: Fractional a => [a]
 zhi = [0,2,5,7,9]
-yu :: Num a => [a]
+yu :: Fractional a => [a]
 yu = [0,3,5,7,10]
 
 -- 6 note scales
-whole' :: Num a => [a]
+whole' :: Fractional a => [a]
 whole' = [0,2,4,6,8,10]
-augmented :: Num a => [a]
+augmented :: Fractional a => [a]
 augmented = [0,3,4,7,8,11]
-augmented2 :: Num a => [a]
+augmented2 :: Fractional a => [a]
 augmented2 = [0,1,4,5,8,9]
 
 -- hexatonic modes with no tritone
-hexMajor7 :: Num a => [a]
+hexMajor7 :: Fractional a => [a]
 hexMajor7 = [0,2,4,7,9,11]
-hexDorian :: Num a => [a]
+hexDorian :: Fractional a => [a]
 hexDorian = [0,2,3,5,7,10]
-hexPhrygian :: Num a => [a]
+hexPhrygian :: Fractional a => [a]
 hexPhrygian = [0,1,3,5,8,10]
-hexSus :: Num a => [a]
+hexSus :: Fractional a => [a]
 hexSus = [0,2,5,7,9,10]
-hexMajor6 :: Num a => [a]
+hexMajor6 :: Fractional a => [a]
 hexMajor6 = [0,2,4,5,7,9]
-hexAeolian :: Num a => [a]
+hexAeolian :: Fractional a => [a]
 hexAeolian = [0,3,5,7,8,10]
 
 -- 7 note scales
-major :: Num a => [a]
+major :: Fractional a => [a]
 major = [0,2,4,5,7,9,11]
-ionian :: Num a => [a]
+ionian :: Fractional a => [a]
 ionian = [0,2,4,5,7,9,11]
-dorian :: Num a => [a]
+dorian :: Fractional a => [a]
 dorian = [0,2,3,5,7,9,10]
-phrygian :: Num a => [a]
+phrygian :: Fractional a => [a]
 phrygian = [0,1,3,5,7,8,10]
-lydian :: Num a => [a]
+lydian :: Fractional a => [a]
 lydian = [0,2,4,6,7,9,11]
-mixolydian :: Num a => [a]
+mixolydian :: Fractional a => [a]
 mixolydian = [0,2,4,5,7,9,10]
-aeolian :: Num a => [a]
+aeolian :: Fractional a => [a]
 aeolian = [0,2,3,5,7,8,10]
-minor :: Num a => [a]
+minor :: Fractional a => [a]
 minor = [0,2,3,5,7,8,10]
-locrian :: Num a => [a]
+locrian :: Fractional a => [a]
 locrian = [0,1,3,5,6,8,10]
-harmonicMinor :: Num a => [a]
+harmonicMinor :: Fractional a => [a]
 harmonicMinor = [0,2,3,5,7,8,11]
-harmonicMajor :: Num a => [a]
+harmonicMajor :: Fractional a => [a]
 harmonicMajor = [0,2,4,5,7,8,11]
-melodicMinor :: Num a => [a]
+melodicMinor :: Fractional a => [a]
 melodicMinor = [0,2,3,5,7,9,11]
-melodicMinorDesc :: Num a => [a]
+melodicMinorDesc :: Fractional a => [a]
 melodicMinorDesc = [0,2,3,5,7,8,10]
-melodicMajor :: Num a => [a]
+melodicMajor :: Fractional a => [a]
 melodicMajor = [0,2,4,5,7,8,10]
-bartok :: Num a => [a]
+bartok :: Fractional a => [a]
 bartok = melodicMajor
-hindu :: Num a => [a]
+hindu :: Fractional a => [a]
 hindu = melodicMajor
 
 -- raga modes
-todi :: Num a => [a]
+todi :: Fractional a => [a]
 todi = [0,1,3,6,7,8,11]
-purvi :: Num a => [a]
+purvi :: Fractional a => [a]
 purvi = [0,1,4,6,7,8,11]
-marva :: Num a => [a]
+marva :: Fractional a => [a]
 marva = [0,1,4,6,7,9,11]
-bhairav :: Num a => [a]
+bhairav :: Fractional a => [a]
 bhairav = [0,1,4,5,7,8,11]
-ahirbhairav :: Num a => [a]
+ahirbhairav :: Fractional a => [a]
 ahirbhairav = [0,1,4,5,7,9,10]
 
 --
-superLocrian :: Num a => [a]
+superLocrian :: Fractional a => [a]
 superLocrian = [0,1,3,4,6,8,10]
-romanianMinor :: Num a => [a]
+romanianMinor :: Fractional a => [a]
 romanianMinor = [0,2,3,6,7,9,10]
-hungarianMinor :: Num a => [a]
+hungarianMinor :: Fractional a => [a]
 hungarianMinor = [0,2,3,6,7,8,11]
-neapolitanMinor :: Num a => [a]
+neapolitanMinor :: Fractional a => [a]
 neapolitanMinor = [0,1,3,5,7,8,11]
-enigmatic :: Num a => [a]
+enigmatic :: Fractional a => [a]
 enigmatic = [0,1,4,6,8,10,11]
-spanish :: Num a => [a]
+spanish :: Fractional a => [a]
 spanish = [0,1,4,5,7,8,10]
 
 -- modes of whole tones with added note ->
-leadingWhole :: Num a => [a]
+leadingWhole :: Fractional a => [a]
 leadingWhole = [0,2,4,6,8,10,11]
-lydianMinor :: Num a => [a]
+lydianMinor :: Fractional a => [a]
 lydianMinor = [0,2,4,6,7,8,10]
-neapolitanMajor :: Num a => [a]
+neapolitanMajor :: Fractional a => [a]
 neapolitanMajor = [0,1,3,5,7,9,11]
-locrianMajor :: Num a => [a]
+locrianMajor :: Fractional a => [a]
 locrianMajor = [0,2,4,5,6,8,10]
 
 -- 8 note scales
-diminished :: Num a => [a]
+diminished :: Fractional a => [a]
 diminished = [0,1,3,4,6,7,9,10]
-diminished2 :: Num a => [a]
+diminished2 :: Fractional a => [a]
 diminished2 = [0,2,3,5,6,8,9,11]
 
 -- modes of limited transposition
-messiaen1 :: Num a => [a]
+messiaen1 :: Fractional a => [a]
 messiaen1 = whole'
-messiaen2 :: Num a => [a]
+messiaen2 :: Fractional a => [a]
 messiaen2 = diminished
-messiaen3 :: Num a => [a]
+messiaen3 :: Fractional a => [a]
 messiaen3 = [0, 2, 3, 4, 6, 7, 8, 10, 11]
-messiaen4 :: Num a => [a]
+messiaen4 :: Fractional a => [a]
 messiaen4 = [0, 1, 2, 5, 6, 7, 8, 11]
-messiaen5 :: Num a => [a]
+messiaen5 :: Fractional a => [a]
 messiaen5 = [0, 1, 5, 6, 7, 11]
-messiaen6 :: Num a => [a]
+messiaen6 :: Fractional a => [a]
 messiaen6 = [0, 2, 4, 5, 6, 8, 10, 11]
-messiaen7 :: Num a => [a]
+messiaen7 :: Fractional a => [a]
 messiaen7 = [0, 1, 2, 3, 5, 6, 7, 8, 9, 11]
 
+-- Arabic maqams taken from SuperCollider's Scale.sc
+bayati :: Fractional a => [a]
+bayati = [0, 1.5, 3, 5, 7, 8, 10]
+hijaz :: Fractional a => [a]
+hijaz = [0, 1, 4, 5, 7, 8.5, 10]
+sikah :: Fractional a => [a]
+sikah = [0, 1.5, 3.5, 5.5, 7, 8.5, 10.5]
+rast :: Fractional a => [a]
+rast = [0, 2, 3.5, 5, 7, 9, 10.5]
+iraq :: Fractional a => [a]
+iraq = [0, 1.5, 3.5, 5, 6.5, 8.5, 10.5]
+saba :: Fractional a => [a]
+saba = [0, 1.5, 3, 4, 6, 8, 10]
+
 -- 12 note scales
-chromatic :: Num a => [a]
+chromatic :: Fractional a => [a]
 chromatic = [0,1,2,3,4,5,6,7,8,9,10,11]
 
-scale :: Num a => Pattern String -> Pattern Int -> Pattern a
+scale :: Fractional a => Pattern String -> Pattern Int -> Pattern a
 scale = getScale scaleTable
 
-getScale :: Num a => [(String, [a])] -> Pattern String -> Pattern Int -> Pattern a
-getScale table sp p = (\n scaleName -> noteInScale (fromMaybe [0] $ lookup scaleName table) n) <$> p <*> sp
+getScale :: Fractional a => [(String, [a])] -> Pattern String -> Pattern Int -> Pattern a
+getScale table sp p = (\n scaleName
+              -> noteInScale (fromMaybe [0] $ lookup scaleName table) n) <$> p <* sp
   where octave s x = x `div` length s
         noteInScale s x = (s !!! x) + fromIntegral (12 * octave s x)
 
 scaleList :: String
-scaleList = unwords $ map fst (scaleTable :: [(String, [Int])])
+scaleList = unwords $ map fst (scaleTable :: [(String, [Rational])])
 
-scaleTable :: Num a => [(String, [a])]
+scaleTable :: Fractional a => [(String, [a])]
 scaleTable = [("minPent", minPent),
               ("majPent", majPent),
               ("ritusen", ritusen),
@@ -250,6 +265,11 @@
               ("messiaen5", messiaen5),
               ("messiaen6", messiaen6),
               ("messiaen7", messiaen7),
-              ("chromatic", chromatic)
+              ("chromatic", chromatic),
+              ("bayati", bayati),
+              ("hijaz", hijaz),
+              ("sikah", sikah),
+              ("rast", rast),
+              ("saba", saba),
+              ("iraq", iraq)
              ]
-
diff --git a/src/Sound/Tidal/Version.hs b/src/Sound/Tidal/Version.hs
--- a/src/Sound/Tidal/Version.hs
+++ b/src/Sound/Tidal/Version.hs
@@ -1,4 +1,4 @@
 module Sound.Tidal.Version where
 
 tidal_version :: String
-tidal_version = "1.4.7"
+tidal_version = "1.4.8"
diff --git a/test/Sound/Tidal/ScalesTest.hs b/test/Sound/Tidal/ScalesTest.hs
--- a/test/Sound/Tidal/ScalesTest.hs
+++ b/test/Sound/Tidal/ScalesTest.hs
@@ -19,249 +19,249 @@
             it "can transform notes correctly over 2 octaves - minPent" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "minPent" twoOctavesOf5NoteScale)
-                    ("0 3 5 7 10 12 15 17 19 22"::Pattern Int)
+                    ("0 3 5 7 10 12 15 17 19 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - majPent" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "majPent" twoOctavesOf5NoteScale)
-                    ("0 2 4 7 9 12 14 16 19 21"::Pattern Int)
+                    ("0 2 4 7 9 12 14 16 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - ritusen" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "ritusen" twoOctavesOf5NoteScale)
-                    ("0 2 5 7 9 12 14 17 19 21"::Pattern Int)
+                    ("0 2 5 7 9 12 14 17 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - egyptian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "egyptian" twoOctavesOf5NoteScale)
-                    ("0 2 5 7 10 12 14 17 19 22"::Pattern Int)
+                    ("0 2 5 7 10 12 14 17 19 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - kumai" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "kumai" twoOctavesOf5NoteScale)
-                    ("0 2 3 7 9 12 14 15 19 21"::Pattern Int)
+                    ("0 2 3 7 9 12 14 15 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hirajoshi" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hirajoshi" twoOctavesOf5NoteScale)
-                    ("0 2 3 7 8 12 14 15 19 20"::Pattern Int)
+                    ("0 2 3 7 8 12 14 15 19 20"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - iwato" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "iwato" twoOctavesOf5NoteScale)
-                    ("0 1 5 6 10 12 13 17 18 22"::Pattern Int)
+                    ("0 1 5 6 10 12 13 17 18 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - chinese" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "chinese" twoOctavesOf5NoteScale)
-                    ("0 4 6 7 11 12 16 18 19 23"::Pattern Int)
+                    ("0 4 6 7 11 12 16 18 19 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - indian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "indian" twoOctavesOf5NoteScale)
-                    ("0 4 5 7 10 12 16 17 19 22"::Pattern Int)
+                    ("0 4 5 7 10 12 16 17 19 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - pelog" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "pelog" twoOctavesOf5NoteScale)
-                    ("0 1 3 7 8 12 13 15 19 20"::Pattern Int)
+                    ("0 1 3 7 8 12 13 15 19 20"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - prometheus" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "prometheus" twoOctavesOf5NoteScale)
-                    ("0 2 4 6 11 12 14 16 18 23"::Pattern Int)
+                    ("0 2 4 6 11 12 14 16 18 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - scriabin" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "scriabin" twoOctavesOf5NoteScale)
-                    ("0 1 4 7 9 12 13 16 19 21"::Pattern Int)
+                    ("0 1 4 7 9 12 13 16 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - gong" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "gong" twoOctavesOf5NoteScale)
-                    ("0 2 4 7 9 12 14 16 19 21"::Pattern Int)
+                    ("0 2 4 7 9 12 14 16 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - shang" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "shang" twoOctavesOf5NoteScale)
-                    ("0 2 5 7 10 12 14 17 19 22"::Pattern Int)
+                    ("0 2 5 7 10 12 14 17 19 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - jiao" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "jiao" twoOctavesOf5NoteScale)
-                    ("0 3 5 8 10 12 15 17 20 22"::Pattern Int)
+                    ("0 3 5 8 10 12 15 17 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - zhi" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "zhi" twoOctavesOf5NoteScale)
-                    ("0 2 5 7 9 12 14 17 19 21"::Pattern Int)
+                    ("0 2 5 7 9 12 14 17 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - yu" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "yu" twoOctavesOf5NoteScale)
-                    ("0 3 5 7 10 12 15 17 19 22"::Pattern Int)
+                    ("0 3 5 7 10 12 15 17 19 22"::Pattern Rational)
         describe "6 note scales" $ do
             let twoOctavesOf6NoteScale = "0 1 2 3 4 5 6 7 8 9 10 11"
             it "can transform notes correctly over 2 octaves - whole" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "whole" twoOctavesOf6NoteScale)
-                    ("0 2 4 6 8 10 12 14 16 18 20 22"::Pattern Int)
+                    ("0 2 4 6 8 10 12 14 16 18 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - wholetone" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "wholetone" twoOctavesOf6NoteScale)
-                    (Sound.Tidal.Scales.scale "whole" twoOctavesOf6NoteScale :: Pattern Int)
+                    (Sound.Tidal.Scales.scale "whole" twoOctavesOf6NoteScale :: Pattern Rational)
             it "can transform notes correctly over 2 octaves - augmented" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "augmented" twoOctavesOf6NoteScale)
-                    ("0 3 4 7 8 11 12 15 16 19 20 23"::Pattern Int)
+                    ("0 3 4 7 8 11 12 15 16 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - augmented2" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "augmented2" twoOctavesOf6NoteScale)
-                    ("0 1 4 5 8 9 12 13 16 17 20 21"::Pattern Int)
+                    ("0 1 4 5 8 9 12 13 16 17 20 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hexMajor7" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hexMajor7" twoOctavesOf6NoteScale)
-                    ("0 2 4 7 9 11 12 14 16 19 21 23"::Pattern Int)
+                    ("0 2 4 7 9 11 12 14 16 19 21 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hexPhrygian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hexPhrygian" twoOctavesOf6NoteScale)
-                    ("0 1 3 5 8 10 12 13 15 17 20 22"::Pattern Int)
+                    ("0 1 3 5 8 10 12 13 15 17 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hexDorian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hexDorian" twoOctavesOf6NoteScale)
-                    ("0 2 3 5 7 10 12 14 15 17 19 22"::Pattern Int)
+                    ("0 2 3 5 7 10 12 14 15 17 19 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hexSus" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hexSus" twoOctavesOf6NoteScale)
-                    ("0 2 5 7 9 10 12 14 17 19 21 22"::Pattern Int)
+                    ("0 2 5 7 9 10 12 14 17 19 21 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hexMajor6" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hexMajor6" twoOctavesOf6NoteScale)
-                    ("0 2 4 5 7 9 12 14 16 17 19 21"::Pattern Int)
+                    ("0 2 4 5 7 9 12 14 16 17 19 21"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hexAeolian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hexAeolian" twoOctavesOf6NoteScale)
-                    ("0 3 5 7 8 10 12 15 17 19 20 22"::Pattern Int)
+                    ("0 3 5 7 8 10 12 15 17 19 20 22"::Pattern Rational)
         describe "7 note scales" $ do
             let twoOctavesOf7NoteScale = "0 1 2 3 4 5 6 7 8 9 10 11 12 13"
             it "can transform notes correctly over 2 octaves - major" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "major" twoOctavesOf7NoteScale)
-                    ("0 2 4 5 7 9 11 12 14 16 17 19 21 23"::Pattern Int)
+                    ("0 2 4 5 7 9 11 12 14 16 17 19 21 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - ionian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "ionian" twoOctavesOf7NoteScale)
-                    (Sound.Tidal.Scales.scale "major" twoOctavesOf7NoteScale :: Pattern Int)
+                    (Sound.Tidal.Scales.scale "major" twoOctavesOf7NoteScale :: Pattern Rational)
             it "can transform notes correctly over 2 octaves - dorian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "dorian" twoOctavesOf7NoteScale)
-                    ("0 2 3 5 7 9 10 12 14 15 17 19 21 22"::Pattern Int)
+                    ("0 2 3 5 7 9 10 12 14 15 17 19 21 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - aeolian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "aeolian" twoOctavesOf7NoteScale)
-                    ("0 2 3 5 7 8 10 12 14 15 17 19 20 22"::Pattern Int)
+                    ("0 2 3 5 7 8 10 12 14 15 17 19 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - aeolian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "minor" twoOctavesOf7NoteScale)
-                    (Sound.Tidal.Scales.scale "aeolian" twoOctavesOf7NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "aeolian" twoOctavesOf7NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - minor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "minor" twoOctavesOf7NoteScale)
-                    (Sound.Tidal.Scales.scale "aeolian" twoOctavesOf7NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "aeolian" twoOctavesOf7NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - locrian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "locrian" twoOctavesOf7NoteScale)
-                    ("0 1 3 5 6 8 10 12 13 15 17 18 20 22"::Pattern Int)
+                    ("0 1 3 5 6 8 10 12 13 15 17 18 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - harmonicMinor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "harmonicMinor" twoOctavesOf7NoteScale)
-                    ("0 2 3 5 7 8 11 12 14 15 17 19 20 23"::Pattern Int)
+                    ("0 2 3 5 7 8 11 12 14 15 17 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - harmonicMajor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "harmonicMajor" twoOctavesOf7NoteScale)
-                    ("0 2 4 5 7 8 11 12 14 16 17 19 20 23"::Pattern Int)
+                    ("0 2 4 5 7 8 11 12 14 16 17 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - melodicMinor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "melodicMinor" twoOctavesOf7NoteScale)
-                    ("0 2 3 5 7 9 11 12 14 15 17 19 21 23"::Pattern Int)
+                    ("0 2 3 5 7 9 11 12 14 15 17 19 21 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - melodicMinorDesc" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "melodicMinorDesc" twoOctavesOf7NoteScale)
-                    (Sound.Tidal.Scales.scale "minor" twoOctavesOf7NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "minor" twoOctavesOf7NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - melodicMajor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "melodicMajor" twoOctavesOf7NoteScale)
-                    ("0 2 4 5 7 8 10 12 14 16 17 19 20 22"::Pattern Int)
+                    ("0 2 4 5 7 8 10 12 14 16 17 19 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - bartok" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "bartok" twoOctavesOf7NoteScale)
-                    (Sound.Tidal.Scales.scale "melodicMajor" twoOctavesOf7NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "melodicMajor" twoOctavesOf7NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hindu" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hindu" twoOctavesOf7NoteScale)
-                    (Sound.Tidal.Scales.scale "melodicMajor" twoOctavesOf7NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "melodicMajor" twoOctavesOf7NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - todi" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "todi" twoOctavesOf7NoteScale)
-                    ("0 1 3 6 7 8 11 12 13 15 18 19 20 23"::Pattern Int)
+                    ("0 1 3 6 7 8 11 12 13 15 18 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - purvi" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "purvi" twoOctavesOf7NoteScale)
-                    ("0 1 4 6 7 8 11 12 13 16 18 19 20 23"::Pattern Int)
+                    ("0 1 4 6 7 8 11 12 13 16 18 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - marva" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "marva" twoOctavesOf7NoteScale)
-                    ("0 1 4 6 7 9 11 12 13 16 18 19 21 23"::Pattern Int)
+                    ("0 1 4 6 7 9 11 12 13 16 18 19 21 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - bhairav" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "bhairav" twoOctavesOf7NoteScale)
-                    ("0 1 4 5 7 8 11 12 13 16 17 19 20 23"::Pattern Int)
+                    ("0 1 4 5 7 8 11 12 13 16 17 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - ahirbhairav" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "ahirbhairav" twoOctavesOf7NoteScale)
-                    ("0 1 4 5 7 9 10 12 13 16 17 19 21 22"::Pattern Int)
+                    ("0 1 4 5 7 9 10 12 13 16 17 19 21 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - superLocrian" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "superLocrian" twoOctavesOf7NoteScale)
-                    ("0 1 3 4 6 8 10 12 13 15 16 18 20 22"::Pattern Int)
+                    ("0 1 3 4 6 8 10 12 13 15 16 18 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - romanianMinor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "romanianMinor" twoOctavesOf7NoteScale)
-                    ("0 2 3 6 7 9 10 12 14 15 18 19 21 22"::Pattern Int)
+                    ("0 2 3 6 7 9 10 12 14 15 18 19 21 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - hungarianMinor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "hungarianMinor" twoOctavesOf7NoteScale)
-                    ("0 2 3 6 7 8 11 12 14 15 18 19 20 23"::Pattern Int)
+                    ("0 2 3 6 7 8 11 12 14 15 18 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - neapolitanMinor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "neapolitanMinor" twoOctavesOf7NoteScale)
-                    ("0 1 3 5 7 8 11 12 13 15 17 19 20 23"::Pattern Int)
+                    ("0 1 3 5 7 8 11 12 13 15 17 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - enigmatic" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "enigmatic" twoOctavesOf7NoteScale)
-                    ("0 1 4 6 8 10 11 12 13 16 18 20 22 23"::Pattern Int)
+                    ("0 1 4 6 8 10 11 12 13 16 18 20 22 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - spanish" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "spanish" twoOctavesOf7NoteScale)
-                    ("0 1 4 5 7 8 10 12 13 16 17 19 20 22"::Pattern Int)
+                    ("0 1 4 5 7 8 10 12 13 16 17 19 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - leadingWhole" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "leadingWhole" twoOctavesOf7NoteScale)
-                    ("0 2 4 6 8 10 11 12 14 16 18 20 22 23"::Pattern Int)
+                    ("0 2 4 6 8 10 11 12 14 16 18 20 22 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - lydianMinor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "lydianMinor" twoOctavesOf7NoteScale)
-                    ("0 2 4 6 7 8 10 12 14 16 18 19 20 22"::Pattern Int)
+                    ("0 2 4 6 7 8 10 12 14 16 18 19 20 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - neapolitanMajor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "neapolitanMajor" twoOctavesOf7NoteScale)
-                    ("0 1 3 5 7 9 11 12 13 15 17 19 21 23"::Pattern Int)
+                    ("0 1 3 5 7 9 11 12 13 15 17 19 21 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - locrianMajor" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "locrianMajor" twoOctavesOf7NoteScale)
-                    ("0 2 4 5 6 8 10 12 14 16 17 18 20 22"::Pattern Int)
+                    ("0 2 4 5 6 8 10 12 14 16 17 18 20 22"::Pattern Rational)
         describe "8 note scales" $ do
             let twoOctavesOf8NoteScale = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
             it "can transform notes correctly over 2 octaves - diminished" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "diminished" twoOctavesOf8NoteScale)
-                    ("0 1 3 4 6 7 9 10 12 13 15 16 18 19 21 22"::Pattern Int)
+                    ("0 1 3 4 6 7 9 10 12 13 15 16 18 19 21 22"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - octatonic" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "octatonic" twoOctavesOf8NoteScale)
-                    (Sound.Tidal.Scales.scale "diminished" twoOctavesOf8NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "diminished" twoOctavesOf8NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - diminished2" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "diminished2" twoOctavesOf8NoteScale)
-                    ("0 2 3 5 6 8 9 11 12 14 15 17 18 20 21 23"::Pattern Int)
+                    ("0 2 3 5 6 8 9 11 12 14 15 17 18 20 21 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - octatonic2" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "octatonic2" twoOctavesOf8NoteScale)
-                    (Sound.Tidal.Scales.scale "diminished2" twoOctavesOf8NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "diminished2" twoOctavesOf8NoteScale::Pattern Rational)
         describe "modes of limited transposition" $ do
             let twoOctavesOf6NoteScale = "0 1 2 3 4 5 6 7 8 9 10 11"
             let twoOctavesOf8NoteScale = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
@@ -270,49 +270,49 @@
             it "can transform notes correctly over 2 octaves - messiaen1" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen1" twoOctavesOf6NoteScale)
-                    (Sound.Tidal.Scales.scale "wholetone" twoOctavesOf6NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "wholetone" twoOctavesOf6NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - messiaen2" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen2" twoOctavesOf8NoteScale)
-                    (Sound.Tidal.Scales.scale "diminished" twoOctavesOf8NoteScale::Pattern Int)
+                    (Sound.Tidal.Scales.scale "diminished" twoOctavesOf8NoteScale::Pattern Rational)
             it "can transform notes correctly over 2 octaves - messiaen3" $ do
                 -- tone, semitone, semitone, tone, semitone, semitone, tone, semitone, semitone
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen3" twoOctavesOf9NoteScale)
-                    ("0 2 3 4 6 7 8 10 11 12 14 15 16 18 19 20 22 23"::Pattern Int)
+                    ("0 2 3 4 6 7 8 10 11 12 14 15 16 18 19 20 22 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - messiaen4" $ do
                 -- semitone, semitone, minor third, semitone, semitone, semitone, minor third, semitone
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen4" twoOctavesOf8NoteScale)
-                    ("0 1 2 5 6 7 8 11 12 13 14 17 18 19 20 23"::Pattern Int)
+                    ("0 1 2 5 6 7 8 11 12 13 14 17 18 19 20 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - messiaen5" $ do
                 -- semitone, major third, semitone, semitone, major third, semitone
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen5" twoOctavesOf6NoteScale)
-                    ("0 1 5 6 7 11 12 13 17 18 19 23"::Pattern Int)
+                    ("0 1 5 6 7 11 12 13 17 18 19 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - messiaen6" $ do
                 -- tone, tone, semitone, semitone, tone, tone, semitone, semitone
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen6" twoOctavesOf8NoteScale)
-                    ("0 2 4 5 6 8 10 11 12 14 16 17 18 20 22 23"::Pattern Int)
+                    ("0 2 4 5 6 8 10 11 12 14 16 17 18 20 22 23"::Pattern Rational)
             it "can transform notes correctly over 2 octaves - messiaen7" $ do
                 -- semitone, semitone, semitone, tone, semitone, semitone, semitone, semitone, tone, semitone
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "messiaen7" twoOctavesOf10NoteScale)
-                    ("0 1 2 3 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 23"::Pattern Int)
+                    ("0 1 2 3 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 23"::Pattern Rational)
         describe "12 note scales" $ do
             let twoOctavesOf12NoteScale = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23"
             it "can transform notes correctly over 2 octaves - chromatic" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "chromatic" twoOctavesOf12NoteScale)
-                    (twoOctavesOf12NoteScale::Pattern Int)
+                    ("0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23"::Pattern Rational)
         describe "edge cases" $ do
             it "responds to unknown scales by mapping to octaves" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "ergaerv" "0 1 2 3 4")
-                    ("0 12 24 36 48"::Pattern Int)
+                    ("0 12 24 36 48"::Pattern Rational)
             it "correctly maps negative numbers" $ do
                 compareP (Arc 0 1)
                     (Sound.Tidal.Scales.scale "major" "0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13")
-                    ("0 -1 -3 -5 -7 -8 -10 -12 -13 -15 -17 -19 -20 -22 "::Pattern Int)
+                    ("0 -1 -3 -5 -7 -8 -10 -12 -13 -15 -17 -19 -20 -22 "::Pattern Rational)
            
diff --git a/tidal.cabal b/tidal.cabal
--- a/tidal.cabal
+++ b/tidal.cabal
@@ -1,5 +1,5 @@
 name:                tidal
-version:             1.4.7
+version:             1.4.8
 synopsis:            Pattern language for improvised music
 -- description:
 homepage:            http://tidalcycles.org/
@@ -51,7 +51,7 @@
       base >=4.8 && <5
     , containers < 0.7
     , colour < 2.4
-    , hosc < 0.18
+    , hosc >= 0.17 && < 0.18
     , text < 1.3
     , parsec >= 3.1.12 && < 3.2
     , network < 3.2
