From 519a22b298c8858f909a95f1d4f1c84741bf23b1 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Fri, 1 Apr 2016 21:51:21 +0200 Subject: Use dynamics and generics to output type --- iclean.icl | 78 ++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 35 deletions(-) (limited to 'iclean.icl') diff --git a/iclean.icl b/iclean.icl index 30287fe..9c5fd23 100644 --- a/iclean.icl +++ b/iclean.icl @@ -1,29 +1,29 @@ /** - * Interactive Clean - * - * Clean program to easily compile and run one-line Clean expressions - * - * The MIT License (MIT) - * - * Copyright (c) 2015 Camil Staps - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. +Interactive Clean + +Clean program to easily compile and run one-line Clean expressions + +The MIT License (MIT) + +Copyright (c) 2015 Camil Staps + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. */ module iclean @@ -34,8 +34,14 @@ import ExtraString // SETTINGS temp_path :== "/tmp/" temp_module :== "iclean" -readline_history :== ".iclean_history" -template :== ["import StdEnv"] +readline_history :== "/home/camil/.iclean_history" +template :== [ "import StdEnv" + , "import StdMaybe" + , "import StdDynamic" + , "import GenPrint" + , "derive gPrint (,),(,,),(,,,),(,,,,),(,,,,,),(,,,,,,),(,,,,,,,)," +++ + "(,,,,,,,,),(,,,,,,,,,),(,,,,,,,,,,),(,,,,,,,,,,,),(,,,,,,,,,,,,)" + ] // END SETTINGS temp_file :== temp_path +++ temp_module +++ ".icl" @@ -44,9 +50,9 @@ Start :: *World -> *World Start w # w = setReadLineName "iClean" w # w = usingHistory w -# w = checkedWorldFunc readHistory "Couldn't read history file\n" readline_history w +# w = checkedWorldFunc readHistory "Couldn't read history" readline_history w # w = loop template True w -# w = checkedWorldFunc writeHistory "Couldn't write history file\n" readline_history w +# w = checkedWorldFunc writeHistory "Couldn't write history" readline_history w = w where loop :: ![String] Bool !*World -> *World @@ -61,11 +67,11 @@ where | s == ":mem" = loop mem True (print (join "\n" mem) w) | matches ":import " s = loop (mem ++ [skip 1 s]) True w | matches ":def " s = loop (mem ++ [skip 5 s]) True w - | matches ":" s = loop mem False (print ("Unknown command " +++ s +++ "\n") w) + | matches ":" s = loop mem False (print ("Unknown command\n") w) # w = writemodule mem s w # (r,w) = compile temp_path temp_module w | r <> 0 = loop mem False w - # (r,w) = run (temp_path +++ temp_module +++ " -nt") w + # (r,w) = run (temp_path +++ temp_module) w | r <> 0 = loop mem False w = loop mem True w @@ -73,7 +79,7 @@ where checkedWorldFunc :: (a *World -> (Bool, *World)) !String !a !*World -> *World checkedWorldFunc f err s w # (ok, w) = f s w -| not ok = print err w +| not ok = print (err +++ "\n") w | otherwise = w print :: String *World -> *World @@ -88,9 +94,11 @@ writemodule :: ![String] !String !*World -> *World writemodule mem s w # (ok,f,w) = fopen temp_file FWriteText w | not ok = abort ("Couldn't open " +++ temp_file +++ " for writing.\n") -# f = fwrites ("module " +++ temp_module +++ "\n") f -# f = fwrites (join "\n" mem) f -# f = fwrites ("Start = " +++ s +++ "\n") f +# f = f <<< "module " <<< temp_module <<< "\n" +# f = f <<< join "\n" mem +# f = f <<< "start = " <<< s <<< "\n" + <<< "Start = toString (typeCodeOfDynamic (dynamic start)) " + <<< "+++ \" :: \" +++ printToString start +++ \"\\n\"\n" # (ok,w) = fclose f w | not ok = abort ("Couldn't close " +++ temp_file +++ "\n") | otherwise = w -- cgit v1.2.3