packages feed

tidal 1.8.0 → 1.8.1

raw patch · 3 files changed

+2/−151 lines, 3 filesdep −asyncdep −hintdep ~text

Dependencies removed: async, hint

Dependency ranges changed: text

Files

− main/Main.hs
@@ -1,139 +0,0 @@-{--    Tidal REPL - mimicking ghci--    Copyright (C) 2021 Johannes Waldmann and contributors--    Forked from:-    https://github.com/jwaldmann/safe-tidal-cli/--    This library is free software: you can redistribute it and/or modify-    it under the terms of the GNU General Public License as published by-    the Free Software Foundation, either version 3 of the License, or-    (at your option) any later version.--    This library is distributed in the hope that it will be useful,-    but WITHOUT ANY WARRANTY; without even the implied warranty of-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-    GNU General Public License for more details.--    You should have received a copy of the GNU General Public License-    along with this library.  If not, see <http://www.gnu.org/licenses/>.--}--{-# language PatternSignatures, LambdaCase #-}--import qualified Language.Haskell.Interpreter as I-import qualified Sound.Tidal.Safe.Context as C-import Control.Monad (void)-import Control.Exception (throw)-import Control.Monad.IO.Class ( MonadIO(liftIO) )-import Control.Monad.Catch-    ( SomeException, MonadCatch(catch), catches, Handler(Handler) )--- import qualified Mueval.Resources as MR-import System.Timeout ( timeout )-import System.IO ( hFlush, stderr, stdout, hPutStrLn, Handle )-import Data.Char (isSpace)-import Data.List (isPrefixOf)--main :: IO()-main = do-  -  -- from BootTidal.hs:-  tidal <- C.startTidal-    (C.superdirtTarget-      { C.oLatency = 0.1, C.oAddress = "127.0.0.1"-      , C.oPort = 57120})-    (C.defaultConfig {C.cFrameTimespan = 1/20})-    -  void $ I.runInterpreter-    $ catch (core tidal)-    $ \ (e :: SomeException) -> message stderr $ show e--core :: C.Stream -> I.InterpreterT IO ()-core tidal = do-    message stdout "[tidal] starting..."-  -- more settings at-  -- https://github.com/tidalcycles/tidali/blob/master/src/Main.hs-    I.set [ I.languageExtensions-              I.:= [ I.OverloadedStrings ]-            , I.installedModulesInScope I.:= False-            ]-    I.setImports-      [ "Prelude"-      , "Sound.Tidal.Safe.Context"-      , "Sound.Tidal.Safe.Boot"-      ]-    -- FIXME: replace lazy IO by some streaming mechanism?-    message stdout "[tidal] modules loaded..."-    input <- liftIO getContents -    message stdout "[tidal] ready"-    mapM_ (work tidal . unlines) $ blocks $ lines input-    message stdout "safe-tidal-cli is done"--second :: Int-second = 10^6 :: Int---- | will show at most 10 lines, at most 80 chars per line,--- and run (evaluation and print) for at most 1 second-message :: Handle -> String -> I.InterpreterT IO ()-message h s = do-  let safe = unlines . safe_list 20 ["..."] . map (safe_list 120 "...") . lines-  liftIO $ void $ timeout (1 * second) $ do-    hPutStrLn h (safe s) ; hFlush h----- | if `length xs <= c`, then `xs`, else `xs <> msg`-safe_list :: Int -> [a] -> [a] -> [a]-safe_list n msg xs =-  let (pre,post) = splitAt n xs-  in  if null post then pre-      else pre <> msg--work :: C.Stream -> String -> I.InterpreterT IO ()-work tidal contents = -        ( if take 2 contents `elem` [ ":t", ":i", ":d", ":s" ]-          then do-            -- https://github.com/haskell-hint/hint/issues/101-            message stderr $ "not implemented " <>  contents-          else -           I.typeChecksWithDetails contents >>= \ case-             Left errs -> throw $ I.WontCompile errs-             Right s ->-               if s == "Op ()" then do -- execute, print nothing-                 -- TODO: need timeout for evaluation of pattern:-                 x <- I.interpret contents (I.as :: C.Op ())-                 -- have timeout for execution of pattern:-                 liftIO $ void $ timeout (1 * second) $ C.exec tidal x-               else do -- print type and value-                 message stdout $ "type : " <> s-                 if isPrefixOf "IO" s then do-                   message stderr "cannot show value, will not execute action"-                 else do-                   v <- I.eval contents-                   message stdout $ "value: " <> v-        )-      `catches`-      [ Handler $ \ (e :: I.InterpreterError) ->-        message stderr $ unlines $ case e of-          I.UnknownError s -> [ "UnknownError", s ]-          I.WontCompile gs -> "WontCompile" : map I.errMsg gs-          I.NotAllowed s   -> [ "NotAllowed", s ]-          I.GhcException s -> [ "GhcException", s ]-      , Handler $ \ (e :: SomeException) ->-        message stderr $ show e-      ]---- | Mimicking ghci, where a block is wrapped in `:{` and `:}`, on otherwise empty lines.--blocks :: [String] -> [[String]]-blocks [] = []-blocks (":{":ls) = b:(blocks ls')-  where (b, ls') = block ls-blocks (l:ls) = [l]:(blocks ls)--block :: [String] -> ([String], [String])-block [] = ([],[])-block (":}":ls) = ([],ls)-block (l:ls) = (l:b, ls')-  where (b, ls') = block ls-
src/Sound/Tidal/Version.hs view
@@ -21,7 +21,7 @@ -}  tidal_version :: String-tidal_version = "1.8.0"+tidal_version = "1.8.1"  tidal_status :: IO () tidal_status = tidal_status_string >>= putStrLn 
tidal.cabal view
@@ -1,7 +1,7 @@ cabal-version:       2.0  name:                tidal-version:             1.8.0+version:             1.8.1 synopsis:            Pattern language for improvised music description:         Tidal is a domain specific language for live coding patterns. homepage:            http://tidalcycles.org/@@ -70,16 +70,6 @@     , exceptions < 0.11     , mtl >= 2.2 -executable tidal-  hs-source-dirs: main-  main-is: Main.hs-  build-depends: base >=4.8 && < 5-               , tidal-               , hint < 0.10-               , exceptions < 0.11-               , async < 2.3-  default-language:    Haskell2010-     test-suite tests   type: exitcode-stdio-1.0   main-is: Test.hs