Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on Haskell.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/haskell.e>
#           or at <http://angg.twu.net/e/haskell.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######





# «.wikibook»			(to "wikibook")
# «.Prelude»			(to "Prelude")
# «.haskell-docs»		(to "haskell-docs")
# «.comprehension»		(to "comprehension")
# «.list-comprehensions»	(to "list-comprehensions")
# «.do-expression-translation»	(to "do-expression-translation")
# «.comprehension-translation»	(to "comprehension-translation")
# «.dump-desugar»		(to "dump-desugar")
# «.let-and-where»		(to "let-and-where")
# «.newtype»			(to "newtype")
# «.class-and-instance»		(to "class-and-instance")
# «.record-syntax»		(to "record-syntax")
# «.pipeThrough»		(to "pipeThrough")
# «.System.Process»		(to "System.Process")
# «.precedence»			(to "precedence")
# «.applicative»		(to "applicative")
# «.liftM2»			(to "liftM2")
# «.import»			(to "import")
# «.tutorials»			(to "tutorials")
# «.hudak»			(to "hudak")
# «.bind»			(to "bind")
# «.return-and-bind»		(to "return-and-bind")
# «.type-inference-heuristically»	(to "type-inference-heuristically")
# «.hugs»			(to "hugs")
# «.entre»			(to "entre")
# «.haskore»			(to "haskore")
# «.sum_chars»			(to "sum_chars")
# «.runhugs»			(to "runhugs")
# «.thih»			(to "thih")
# «.parsec»			(to "parsec")
# «.yarrow»			(to "yarrow")
# «.ghc»			(to "ghc")
# «.ghc-deb»			(to "ghc-deb")
# «.gh»				(to "gh")
# «.epigram»			(to "epigram")
# «.multi-line»			(to "multi-line")
# «.runhaskell»			(to "runhaskell")
# «.:info»			(to ":info")
# «.:set+t»			(to ":set+t")
# «.main»			(to "main")
# «.:main»			(to ":main")
# «.getArgs»			(to "getArgs")
# «.:def»			(to ":def")
# «.type-signature»		(to "type-signature")
# «.eepitch-hugs»		(to "eepitch-hugs")
# «.haskell-mode»		(to "haskell-mode")
# «.haskell-mode-M-e»		(to "haskell-mode-M-e")
# «.daume-yaht»			(to "daume-yaht")
# «.xmonad»			(to "xmonad")
# «.xmonad-rcfile»		(to "xmonad-rcfile")
# «.escape-from-zurg»		(to "escape-from-zurg")
# «.luautils»			(to "luautils")
# «.distributivity»		(to "distributivity")
# «.cabal»			(to "cabal")
# «.cabal-PATH»			(to "cabal-PATH")
# «.hackage»			(to "hackage")
# «.lhs2tex»			(to "lhs2tex")
# «.haskell-platform»		(to "haskell-platform")
# «.programming-cats»		(to "programming-cats")
# «.Hask»			(to "Hask")
# «.books-about-haskell»	(to "books-about-haskell")
# «.learn-hfm»			(to "learn-hfm")
# «.haskell-stack»		(to "haskell-stack")
# «.stridi»			(to "stridi")
# «.diagrams»			(to "diagrams")
# «.hutton-book»		(to "hutton-book")
# «.typing-the-composition»	(to "typing-the-composition")
# «.typing-do-notation»		(to "typing-do-notation")
# «.haskell-to-core»		(to "haskell-to-core")
# «.haskell-report»		(to "haskell-report")
# «.where»			(to "where")
# «.foldr»			(to "foldr")
# «.tuples»			(to "tuples")
# «.monomorphism-restriction»	(to "monomorphism-restriction")
# «.translating-Ax»		(to "translating-Ax")
# «.lawvere»			(to "lawvere")
# «.hoodle»			(to "hoodle")
# «.libtinfo-missing»		(to "libtinfo-missing")
# «.music»			(to "music")
# «.calling-lua»		(to "calling-lua")
# «.System.IO»			(to "System.IO")
# «.pipes»			(to "pipes")
# «.kan-extensions»		(to "kan-extensions")
# «.dist-install»		(to "dist-install")
# «.hsc2hs»			(to "hsc2hs")
# «.tagless»			(to "tagless")
# «.AD.hs»			(to "AD.hs")
# «.etags»			(to "etags")
# «.hasktags»			(to "hasktags")
# «.hs-tags»			(to "hs-tags")
# «.hoogle»			(to "hoogle")
# «.:def-hoogle»		(to ":def-hoogle")
# «.hayoo»			(to "hayoo")
# «.InstanceSigns»		(to "InstanceSigns")
# «.template-haskell»		(to "template-haskell")
# «.no-instance-for»		(to "no-instance-for")
$ «.stg»			(to "stg")
# «.graph-reduction»		(to "graph-reduction")
# «.rewrite-rules»		(to "rewrite-rules")
# «.ReadS»			(to "ReadS")
# «.prettier»			(to "prettier")
# «.enumFromTo»			(to "enumFromTo")
# «.lambdabot»			(to "lambdabot")
# «.explicit-foralls»		(to "explicit-foralls")




#####
#
# wikibook
# 2024jun22
#
#####

# «wikibook»  (to ".wikibook")
# https://en.wikibooks.org/wiki/Haskell/Understanding_monads/State




#####
#
# The Haskell Prelude (in GHC)
# 2022sep22
#
#####

# «Prelude»  (to ".Prelude")
# (find-sh "locate -i ghc | grep -i prelude")
# (find-ghcsh "find * | sort")
# (find-ghcsh "find * | sort | grep Prelude")
# (find-ghcsh "find * | sort | grep Show")
# (find-ghcsh "find * | sort | grep Data.Maybe")
# (find-ghcsh "find * | sort | grep Applicative")
# (find-ghcbasesh "find * | sort")
# (find-ghcbasesh "find * | sort | grep 'hs$'")
# (find-ghcbasefile "")
# (find-ghcbasegrep "grep --color=auto -nRH --null -e Kleisli *")
# (find-ghcbasegrep "grep --color=auto -niRH --null -e laws *")
# (find-ghcbasegrep "grep --color=auto -nRH --null -e RULES *")
# (find-ghcfile "libraries/base/")
# (find-ghcfile "libraries/base/Prelude.hs")
# (find-ghcfile "libraries/base/Control/")
# (find-ghcfile "libraries/base/Control/Applicative.hs")
# (find-ghcfile "libraries/base/Control/Monad.hs")
# (find-ghcfile "libraries/base/Control/Monad.hs" "{- $naming")
# (find-ghcfile "libraries/base/Data/")
# (find-ghcfile "libraries/base/Data/Either.hs")
# (find-ghcfile "libraries/base/Data/Foldable.hs")
# (find-ghcfile "libraries/base/Data/Functor.hs")
# (find-ghcfile "libraries/base/Data/List.hs")
# (find-ghcfile "libraries/base/Data/Maybe.hs")
# (find-ghcfile "libraries/base/Data/Traversable.hs")
# (find-ghcfile "libraries/base/Data/Tuple.hs")
# (find-ghcfile "libraries/base/GHC/")
# (find-ghcfile "libraries/base/GHC/Base.hs")
# (find-ghcfile "libraries/base/GHC/Enum.hs")
# (find-ghcfile "libraries/base/GHC/Float.hs")
# (find-ghcfile "libraries/base/GHC/Num.hs")
# (find-ghcfile "libraries/base/GHC/Real.hs")
# (find-ghcfile "libraries/base/GHC/Show.hs")
# (find-ghcfile "libraries/base/System/")
# (find-ghcfile "libraries/base/System/IO.hs")
# (find-ghcfile "libraries/base/System/IO/Error.hs")
# (find-ghcfile "libraries/base/Text/")
# (find-ghcfile "libraries/base/Text/Read.hs")





#####
#
# Haskell docs in Debian: the Haskell98 report & tutorial
# 2011nov17 / 2022oct03
#
#####

# «haskell-docs»  (to ".haskell-docs")
# (find-angg ".emacs" "haskell")
# (find-angg ".emacs" "haskell-docs")
# (find-angg ".emacs" "ee-rstdoc-:h98")
# (find-zsh "installeddebs | sort | grep haskell")
# (find-zsh "availabledebs | sort | grep haskell")

# (find-status   "haskell98-report")
# (find-vldifile "haskell98-report.list")
# (find-udfile   "haskell98-report/")
# (find-status   "haskell98-tutorial")
# (find-vldifile "haskell98-tutorial.list")
# (find-udfile   "haskell98-tutorial/")
# (find-sh0 "zcat /usr/share/doc/haskell98-report/haskell98-report.pdf.gz > ~/tmp/haskell98-report.pdf")
# (code-pdf-page "h98" "/usr/share/doc/haskell98-report/haskell98-report.pdf.gz")
# (code-pdf-text "h98" "/usr/share/doc/haskell98-report/haskell98-report.pdf.gz")



https://www.haskell.org/tutorial/haskell-98-tutorial.pdf

# file:///usr/share/doc/haskell98-report/html/index.html
# file:///usr/share/doc/haskell98-report/html/haskell98-report-html/index.html
# file:///usr/share/doc/haskell98-tutorial/html/index.html
# file:///usr/share/doc/haskell98-tutorial/html/indextutorial.html

# (find-h98doc "index")
# (find-h98doc "index98")
# (find-h98doc "basic#monad-class")
# (find-h98doc "io-13#io")





# (find-hask98reportfile "")
# (find-hask98reportsw3m "index.html")
# (find-hask98reportsw3m "index98.html")
# (find-hask98tutfile "")
# (find-hask98reportw3m "index.html")

# (code-c-d "h98reph" "/usr/share/doc/haskell98-report/html/haskell98-report-html/")
# (code-c-d "h98tuth" "/usr/share/doc/haskell98-tutorial/html/")
# (find-h98rephfile "")
# (find-h98tuthfile "")
# (find-h98rephw3m "index.html")
# (find-h98rephw3m "monad.html")
# (find-h98tuthw3m "index.html")
# (find-h98tuthw3m "indextutorial.html")





#####
#
# Comprehension
# 2012mar30
#
#####

# «comprehension»  (to ".comprehension")
# (find-angg "HASKELL/Comprehensions1.hs")
# (find-dn5 "gabriela-app.lua" "comprehension")
# (find-hask98tutw3m "goodies.html#tut-list-comps")
# http://www.haskell.org/haskellwiki/List_comprehension
# (find-hask98reportw3m "exps.html#list-comprehensions")
# http://en.wikipedia.org/wiki/List_comprehension




#####
#
# list-comprehensions
# 2021jan10
#
#####

# «list-comprehensions»  (to ".list-comprehensions")
# (find-huttonbookpage  67 "5" "List comprehensions")
# (find-huttonbooktext  67 "5" "List comprehensions")
# (find-rwhaskellpage (+ 40 10) "ghci> [1..10]")
# (find-rwhaskelltext (+ 40 10) "ghci> [1..10]")
# (find-anggfile "HASKELL/Comprehensions1.hs")
# (find-fline "~/LOGS/2021jan10.haskell")
# (find-ghcfile "libraries/base/Control/Monad.hs" "guard True")
# file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/Control-Monad.html#g:6
# (find-h98tdoc "stdclasses")
# (find-h98tdoc "stdclasses#tut-enum-classes")
# (find-h98doc  "exps#arithmetic-sequences")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
[(a,b) | a <- [0,1], b <- [a+1,a+2]]
[(a,b) | a <- [0,1], b <- [a+1,a+2], a+b < 4]
[(x,y) | y <- [3,2..0], x <- [0..y]]
[(x,y) | y <- [3,2..0], x <- [0..y], x+y <= 4]

:?
:module +Control.Monad
:t guard
[(a,b) | a <- [0,1], b <- [a+1,a+2],             a+b < 4 ]
[(a,b) | a <- [0,1], b <- [a+1,a+2], _ <- guard (a+b < 4)]

do a <- [0,1]; b <- [a+1,a+2]; return (a,b)
do a <- [0,1]; b <- [a+1,a+2];      guard (a+b < 4); return (a,b)
do a <- [0,1]; b <- [a+1,a+2]; _ <- guard (a+b < 4); return (a,b)




#####
#
# do-expression-translation
# 2024may21
#
#####

# «do-expression-translation»  (to ".do-expression-translation")
# «comprehension-translation»  (to ".comprehension-translation")
# (find-books "__comp/__comp.el" "haskell-2010" "22" "Translation:" "List comprehensions")
# (find-books "__comp/__comp.el" "haskell-2010" "25" "Translation: Do expressions")

# (find-fline "~/LOGS/2024may18.haskell" "haskellch3.html#x8-470003.14")
# https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-470003.14 do expression transl
# https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-420003.11 comprehension transl



#####
#
# dump-desugar
# 2024may21
#
#####

# «dump-desugar»  (to ".dump-desugar")
# https://stackoverflow.com/questions/8019670/desugaring-do-notation-for-monads

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd    /tmp/
cat > /tmp/Foo.hs <<'%%%'
module Foo where
a = do x <- [3..4]
       [1..2]
       return (x, 42)
%%%
ghc -c /tmp/Foo.hs -ddump-ds





#####
#
# let and where
# 2022sep24
#
#####

# «let-and-where»  (to ".let-and-where")
# (find-books "__comp/__comp.el" "haskell-hutton")
# (find-books "__comp/__comp.el" "haskell-hutton" "The layout rule" "where")
# (find-books "__comp/__comp.el" "haskell-hutton" "The let mechanism")



#####
#
# newtype
# 2022sep18
#
#####

# «newtype»  (to ".newtype")
# (find-angggrep "grep --color=auto -niH --null -e newtype HASKELL/*.hs")
# (find-books "__comp/__comp.el" "haskell-hutton")
# (find-books "__comp/__comp.el" "haskell-hutton" "Newtype declarations")




#####
#
# class-and-instance
# 2022sep18
#
#####

# «class-and-instance»  (to ".class-and-instance")
# (find-h98doc "decls#sect4.1")
# (find-h98tdoc "classes")
# (find-books "__comp/__comp.el" "haskell-hutton")
# (find-books "__comp/__comp.el" "haskell-hutton" "Class and instance declarations")
# (find-angggrep "grep --color=auto -nH --null -e hutton HASKELL/*.hs")
# (find-anggfile "HASKELL/inttree.hs")
# (find-anggfile "HASKELL/Classes1.hs")
# (find-ghcugdoc "ghci#ghci-cmd-instances")
# https://fare.livejournal.com/155094.html John Peterson, Mark Jones: "Implementing Type Classes" (1993)
# https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.53.3952




#####
#
# record-syntax
# 2022sep24
#
#####

# «record-syntax»  (to ".record-syntax")
# (find-h98doc "exps#sect3.15")
# (find-h98doc "exps#record-update")
# (find-h98doc "exps#record-construction")
# (find-books "__comp/__comp.el" "haskell-rw")
# (find-books "__comp/__comp.el" "haskell-rw" "Record Syntax")
# (find-books "__comp/__comp.el" "haskell-2010")
# (find-books "__comp/__comp.el" "haskell-2010" "record")
# (find-angg "HASKELL/Process1.hs")
# (find-fline "~/LOGS/2022oct01.haskell" "data Driver m = Driver {")
# (find-rwhaskellpage (+ 40 55) "Record Syntax")
# (find-rwhaskelltext (+ 40 55) "Record Syntax")

<EvanR> data Employee = Employee { name :: String, salary :: Int }
<edrx> yep
<EvanR> data Driver m = Driver { putChar :: Char -> m (), getChar
        :: m Char }



#####
#
# pipeThrough
# 2022oct09
#
#####

# «pipeThrough»  (to ".pipeThrough")
# (to "System.Process")
# (find-angg "HASKELL/LuaTree1.hs" "pipeThrough")




#####
#
# System.Process
# 2022oct09
#
#####

# «System.Process»  (to ".System.Process")
# (find-angg "HASKELL/Tac1.hs")
# (find-sh "locate System.Process")
# (find-sh "locate System/Process")
# (find-ghcfile "libraries/process/")
# (find-ghcfile "libraries/process/System/Process.hs" "-- createProcess")
# (find-ghcfile "libraries/process/System/Process.hs" "-- > withCreateProcess")
# (find-hoogle "createProcess")
# https://lotz84.github.io/haskellbyexample/ex/spawning-processes ***
# https://stackoverflow.com/questions/21034040/haskell-createprocess-and-read-from-handle
# https://www.reddit.com/r/haskell/comments/evegox/running_external_programs_with_haskell/ *
# https://www.reddit.com/r/haskell/comments/1nkw1c/usage_of_package_systemprocess/

Prelude System.Process System.IO> import System.Process
Prelude System.Process System.IO> import System.IO
Prelude System.Process System.IO> :{
Prelude System.Process System.IO| withCreateProcess (proc "ghc" ["--help"]){ std_out = CreatePipe } (\_ (Just outputH) _ procH -> do
Prelude System.Process System.IO|     outputText <-hGetContents outputH
Prelude System.Process System.IO|     print $ take 70 outputText
Prelude System.Process System.IO|   )
Prelude System.Process System.IO| :}
"Usage:\n\n    ghc [command-line-options-and-input-files]\n\nTo compile and"
*** Exception: terminateProcess: permission denied (Permission denied)



#####
#
# precedence
# 2024aug01
#
#####

# «precedence»  (to ".precedence")
# https://stackoverflow.com/questions/3125395/haskell-operator-vs-function-precedence
# https://rosettacode.org/wiki/Operator_precedence
# https://hackage.haskell.org/package/CheatSheet-1.7/src/CheatSheet.pdf

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:t (<*>)
:info (<*>)
:help



#####
#
# applicative
# 2022sep30
#
#####

# «applicative»  (to ".applicative")
# (find-anggfile "HASKELL/Applicative1.hs")

# (find-books "__comp/__comp.el" "haskell-hutton" "Applicatives")
# (find-ghcfile "libraries/base/Control/Applicative.hs")
# http://www.soi.city.ac.uk/~ross/papers/Applicative.html
# https://www.staff.city.ac.uk/~ross/papers/Applicative.pdf
# (find-angg "HASKELL/State1.hs")
# (find-fline "~/LOGS/2024aug01.haskell")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:t (<*>)
:help




#####
#
# liftM2
# 2022sep30
#
#####

# «liftM2»  (to ".liftM2")
# (find-fline "~/LOGS/2022sep30.haskell")
# (find-fline "~/LOGS/2022sep30.haskell2")
# (find-ghcbasegrep "grep --color=auto -nRH --null -e liftM2 *")
# (find-ghcbasefile "GHC/Base.hs" "liftM2 f m1 m2          =")

liftM2  :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2    f       m1   m2    = do { x1 <-  m1 ; x2 <-  m2 ; return (f x1 x2) }
       ========= ==== ====          ==    ====  ==    ====            == ==
       a1->a2->r m a1 m a2          a1    m a1  a2    m a2            a1 a2
==========================                                          =======
             m r                                                       r
                                                            ================
                                                                     m r

liftM2    f       m1   m2    =  m1  >>= \x1 ->  m2  >>= \x2 -> f x1 x2
       ========= ==== ====     ====      ==    ====      ==      == ==
       a1->a2->r m a1 m a2     m a1      a1    m a2      a2      a1 a2
================                                               =======
 m a1->m a2->m r                                                 m r
=====================                                   ==============
       m a2->m r                                             a2->m r
==========================                     =======================
             m r                                                 m r
                                        ==============================
                                                             a1->m r
                               =======================================
                                                                 m r  

             liftM2 ($)                      ($)
=====================================  ==============
         (a1->a2->r)->m a1->m a2->m r   (a->b)->a->b
=====================================  ==============
((a2->r)->a2->r)->m(a2->r)->m a2->m r  (a2->r)->a2->r
=====================================================
                  m(a2->r)->m a2->m r
=====================================================
                   m(a->b)->m a->m b

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:module +GHC.Base
:t ($)
:t liftM2
:t liftM2 ($)
:t liftM2 id
:hoogle liftM2
:hoogle $



#####
#
# import
# 2022sep25
#
#####

# «import»  (to ".import")
# (find-books "__comp/__comp.el" "haskell-rw" "module")
# (find-rwhaskellpage (+ 40 114)  "Generating a Haskell Program and Importing Modules")
# (find-rwhaskellpage (+ 40 123)  "Writing a Module Header")
# (find-ghcugdoc "index")
# (find-ghcugdoc "ghci#what-s-really-in-scope-at-the-prompt")
# (find-ghcugdoc "ghci#the-effect-of-load-on-what-is-in-scope")
# (find-ghcugdoc "ghci#controlling-what-is-in-scope-with-import")
# (find-ghcugdoc "ghci#using-do-notation-at-the-prompt")
# https://www.haskell.org/onlinereport/index.html
# https://www.haskell.org/onlinereport/modules.html
# https://www.haskell.org/onlinereport/syntax-iso.html
# https://www.haskell.org/onlinereport/lexemes.html#lexemes-layout





#####
#
# Recommended tutorials
# 2022sep24
#
#####

# «tutorials»  (to ".tutorials")
# (find-fline "~/LOGS/2022sep24.haskell")
# (find-fline "~/LOGS/2022sep24.haskell" "@where books")
# (find-fline "~/LOGS/2022sep24.haskell2")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
f () { tr ' ,<>' '\n\n\n\n' | sort | uniq | grep http; }
cat ~/LOGS/2022sep24.haskell  | f
cat ~/LOGS/2022sep24.haskell2 | f




#####
#
# A Gentle Introduction to Haskell, version 1998 - Hudak, Peterson, Fasel
# 2022sep24
#
#####

# «hudak»  (to ".hudak")
# (find-angg ".emacs" "ee-rstdoc-:h98t")
# https://www.haskell.org/tutorial/
# https://www.haskell.org/tutorial/haskell-98-tutorial.pdf
# https://www.haskell.org/tutorial/haskell-98-tutorial-html.tar.gz
# https://www.haskell.org/tutorial/haskell-98-tutorial-sources.tar.gz
# https://www.haskell.org/tutorial/code.tar.gz

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv ~/usrc/haskell-98-tutorial-sources/
tar -C ~/usrc/ -xvzf \
  $S/https/www.haskell.org/tutorial/haskell-98-tutorial-sources.tar.gz
cd     ~/usrc/haskell-98-tutorial-sources/


https://www.seas.upenn.edu/~cis1940/spring13/
https://www.seas.upenn.edu/~cis1940/spring13/lectures.html
https://www.seas.upenn.edu/~cis1940/spring13/lectures/05-type-classes.html
https://www.seas.upenn.edu/~cis1940/spring13/lectures/05-type-classes.lhs



#####
#
# bind
# 2022sep24
#
#####

# «bind»  (to ".bind")
# «return-and-bind»  (to ".return-and-bind")
# https://el-tramo.be/blog/async-monad/
# (find-ghcbasefile "Control/Monad.hs" "(>=>)  ")
# (find-ghcbasefile "Control/Monad.hs" "(<=<)  ")
# (find-ghcbasesh "find * | sort")
# (find-ghcbasegrep "grep --color=auto -nRH --null -e '>>=' *")
# (find-ghcbasegrep "grep --color=auto -nRiH --null -e monad * | grep -a -i class")

(>=>)       :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c)
f >=> g     = \x -> f x >>= g

     f      >=>      g       =   \  x   ->      f        x   >>=      g	    
-----------     -----------	   ----    -----------  ----     ----------- 
:: a -> m b     :: b -> m c	   :: a    :: a -> m b  :: a     :: b -> m c 
---------------------------	           -----------------		    
       :: a -> m c		                :: m b			    
				           ----------------------------------
				                       :: m c		    
				 --------------------------------------------
				               :: a -> m c                   

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:t (>>=)




#####
#
# type-inference-heuristically
# 2021jul26
#
#####

# «type-inference-heuristically»  (to ".type-inference-heuristically")
# (find-fline "~/LOGS/2021jul26.haskell" "type-inference.html")
# http://www.vex.net/~trebla/haskell/type-inference.html
# http://www.vex.net/~trebla/haskell/index.xhtml
# (excp 30 "typing")
# (exca    "typing")




#####
#
# Hugs
# 2011nov17
#
#####

# «hugs»  (to ".hugs")
# (find-angg ".emacs" "hugs")
# (find-status   "hugs")
# (find-vldifile "hugs.list")
# (find-udfile   "hugs/")
# (find-udfile   "hugs/examples/")
# (find-hugsbasefile "../")
# (find-hugsbasefile "../Paths_hugsbase.hs")
# (find-hugsbasefile "../Hugs.hs")
# (find-hugsbasefile "Prelude.hs")
# (find-hugsbasefile "Prelude.hs" "\nmap ")
# (find-hugsbasefile "Prelude.hs" "\nfoldl ")
# (find-hugsbasefile "")
# (find-hugsoldlibfile "")



#####
#
# entre ("Explicit Naive Term Rewriting Engine")
# 2001feb14
#
#####

# «entre»  (to ".entre")
# (find-shttpfile "www.cit.gu.edu.au/~arock/entre/")
# (find-shttpw3 "www.cit.gu.edu.au/~arock/entre/")
# (find-shttpw3 "www.cit.gu.edu.au/~arock/entre/entre.html")
# (find-entrefile "")
# (find-entrefile "entre.txt")
#*
rm -Rv $S/http/www.cit.gu.edu.au/~arock/entre/
psner http://www.cit.gu.edu.au/~arock/entre/
#*
cd $S/http/www.cit.gu.edu.au/~arock/entre/
tar -cvzf entre.tar.gz README Makefile *.lhs *.es *.html *.gif

#*
rm -Rv /usr/src/entre/
mkdir  /usr/src/entre/
cd     /usr/src/entre/
tar -xvzf $S/http/www.cit.gu.edu.au/~arock/entre/entre.tar.gz
lynx -dump entre.html > entre.txt
grep '^entre\?' entre.txt > o

#*
cd /usr/src/entre/
cat > $EEG <<'---'
entre
:?
3 + 4 * 5
:s 3 + 4 * 5
:w 3 + 4 * 5

a = 3 + 4 * 5
:p
2 * a
print_mode = s
print_mode = full verbosity
a := 3 + 4 * 5
2 * a
1 - -2
1--2
10 - 3 - 2
(10 - 3) - 2
10 - (3 - 2)
(\x -> x + 1) 41
square = \x -> x * x
square 3
le = \x -> \y -> x < y || x == y
le 3 6
add x y = x + y
:p
add 3 4
-- The next line gives an error. Why?
-- (find-entrefile "entre.txt" "entre? not p")
not p = if p then False else True
not True
fact n = if n <= 1 then 1 else n * fact (n - 1)
fact 3
:f fact 6
[-2..2]
[1, 3 .. 10]
head [1, 2, 3]
tail [3, 2, 1]
length xs = if xs == [] then 0 else 1 + length (tail xs)
:f length [1, 3 .. 10]
:f length [[], [1], [1,2]]
5 + 4 `div` 2
5 + 4 `div` 0
5 + 4 `div` 3
5 + 4 `div` (-3)
5 + 4 `div` -3
compose f g x = f (g x)
a x = x * x
b x = x + 2
compose a b 2
compose b a 2
:q
:q
---
eeg hugs entre.lhs

#*

# (code-c-d "entre" "/usr/src/entre/")
# (find-entrefile "")
# (find-entrefile "entre.txt")
# (find-entrefile "entre.txt" "Then launch entre, by typing:")







#####
#
# easter eggs
# 2000dec02
#
#####

# «sum_chars»  (to ".sum_chars")
#*
cd /tmp/
cat > hash.hs <<'---'
hash :: [Char] -> Int
hash = (foldl (+) 0) . (map ord)
---
cat > $EEG <<'---'
:load hash.hs
hash "MSDOS 6.000"
hash "SYSTEM 7.0"
hash "HASKELL%98"
hash "Haskell Ninety Eight !!"
hash "Turing!"
---
eeg hugs
#*




#####
#
# Hugs June98 (1.4+)
#
#####

cd /usr/src/
rm -Rv hugs*
tar -xvzf /snarf/ftp/haskell.org/pub/haskell/hugs/June98/hugs-June98-source.tgz
cd /usr/src/hugs/
mkdir tmp

cd /usr/src/hugs/src/unix
# ./configure --prefix=/usr/src/hugs/tmp	|& tee /usr/src/hugs/oc
./configure --prefix=/usr	|& tee /usr/src/hugs/oc
cd ..
make install	|& tee /usr/src/hugs/omi

#
# cgi demos:
#
rm -Rv /var/www/hugs
mkdir /var/www/hugs
cd /usr/src/hugs/demos/cgi/
cp -iv * /var/www/hugs
# (find-node "(gawk)One-liners")
# (find-node "(gawk)String Functions" "gsub")
for i in *.cgi; do
  cat $i \
  | awk 'NR == 1 { print "#! /usr/bin/runhugs +l" }
         NR > 1 { gsub(/\/homes\/systems\/hcompile\/cgi-bin\//,
		       "/var/www/hugs/");
		  print }' \
  > /var/www/hugs/$i 
done
for i in *.hs; do
  cat $i \
  | awk '{ gsub(/\/homes\/systems\/hcompile\/cgi-bin\//, "/var/www/hugs/");
           gsub(/http:\/\/www.haskell.org\/cgi-bin\/counter.cgi/,
		"counter.cgi");
	   print }' \
  > /var/www/hugs/$i 
done
chmod 755 /var/www/hugs/*.cgi
chown edrx:edrx /var/www/hugs/*.cgi



#
# etc:
#
cd /var/www/hugs/
lynx http://127.0.0.1/hugs/
edrxnetscape http://127.0.0.1/hugs/
mycat /var/www/hugs/*.cgi

# (find-hugsfile "src/unix/README")
# (find-hugsfile "src/unix/INSTALL" "Optional Features")
# (find-hugsfile "src/unix/configure.in")







# Testing ghc
#
cd ~/HUGS/
cat > hello.hs <<'EOF'
main = putStr "Hello, fpworld!\n"
EOF
ghc -v -o hello hello.hs |& tee og
./hello

# (find-node "(installing)Top")
# (find-node "(installing)installing_4.1")
# (find-node "(installing)GHC_test")
# (find-node "(installing)installing_6.3" "gmake")
# (find-node "(libs)Top")
# (find-node "(user)Top")





#####
#
# Hugs: prettyprinting
#
#####

# (find-hugslibfile "")
# (find-hugslibfile "exts/")
# (find-hugslibfile "exts/Pretty.lhs")

gv $S/http/www.cs.chalmers.se/~rjmh/Papers/pretty.ps &
#*
cat > $EEG <<'---'
t 1 <+> t 2 <+> (t 3 $$ (t 4 <+> t 5)) where t = int
:q
---
eeg hugs Pretty
# Broken...
#*

# Broken links:
# (find-hugsfile "lib/hugs/Pretty.lhs")
# (find-hugsfile "demos/Literate.lhs")
# (find-hugsfile "demos/cgi/")
# (find-hugsfile "demos/cgi/Pretty.hs")
# (find-hugsfile "demos/cgi/PrettyHTML.hs")
# (find-fline "~/HUGS/mypretty.hs")

1 2 3
    4 5
  6 7 8




#####
#
# Lixos?
#
#####

# (find-fline "/usr/src/hugs/lib/Prelude.hs" "instance Monad IO where")
lynx /usr/src/hugs/docs/report/io-13.html

#*
cat > $EEG <<'---'
:type filter isAscii "foo"
:type readFile "input-file"
:type writeFile "output-file" (filter isAscii "str")
:type readFile "a" >>= \s -> writeFile "b" s >> putStr "ok"
:q
---
eeg hugs
#*

  readFile "a" >>= \s -> writeFile "b" s >> putStr "ok"	:: IO ()
  readFile "a" >>= \s -> writeFile "b" s		:: IO ()
  readFile "a"                                          :: IO S
  readFile                                              :: S -> IO S
           "a"                                          :: S

		         ========= ===
		         ============= =
  ======== ===      =    ===============
  ============ === =====================    ====== ====
  ====================================== == ===========
  =====================================================
  readFile "a" >>= \s -> writeFile "b" s >> putStr "ok"




#####
#
# Parsers
#
#####

gv /snarf/http/www.cs.chalmers.se/~rjmh/Papers/arrows.ps &
gv /snarf/http/www.cs.chalmers.se/~rjmh/Papers/pretty.ps &

# (find-hugsfile "lib/Prelude.hs" "-- Monad classes")
# (find-fline "~/CRIM/005ideas" "MonadPlus")
# (find-hugsfile "lib/Prelude.hs" "-- Lists")
# (find-hugsfile "lib/Prelude.hs" "instance Monad [ ] where")

    (>>)   :: m a -> m b -> m b
    p >> q  = p >>= \ _ -> q

instance Monad [ ] where
    (x:xs) >>= f  =  f x ++ (xs >>= f)
    []     >>= f  =  []
    return x      =  [x]

-- [a1, a2, a3] >>= f   =   f a1 ++ f a2 ++ f a3
-- [a1, a2] >> [b1, b2, b3]   =   [b1, b2, b3, b1, b2, b3]
 



instance MonadZero [ ] where
    zero = []

instance MonadPlus [ ] where
    []     ++ ys = ys
    (x:xs) ++ ys = x : (xs ++ ys)




#####
#
# runhugs
# 2001feb14
#
#####

# «runhugs»  (to ".runhugs")
# (find-esfile "perl1.e" "lasagna")
# (find-hugsfile "demos/cgi/")
# (find-hugsfile "src/")
# (find-hugsfile "src/runhugs.c")

#*
cat > /tmp/h <<'---'
main = putStr "foo\n";
---
runhugs /tmp/h

#*
function rhugs () {
  cat > ${TMPHUGSFILE:-/tmp/h}
  runhugs ${TMPHUGSFILE:-/tmp/h}
  echo
}
rhugs <<'---'
main = putStr "foo";
---
rhugs <<'---'
main = do {
	putStr (show "foo");
	putStr (show [1, 2]);
}
---

#*
rhugs <<'%%%'
-- lmatch :: String -> String -> Bool
lmatch "" s = True
lmatch (c:cs) (c':cs') = if (c == c') then (lmatch cs cs') else False
lmatch _ _ = False
main = putStr (show (lmatch "foo" "foobar"))
%%%

rhugs <<'%%%'
a = 2 *
    3 + 4 * 5
main = putStr (show a)
%%%

#*




#####
#
# Typing Haskell in Haskell
# 1999? / 2021jan18
#
#####

# «thih»  (to ".thih")
# http://web.cecs.pdx.edu/~mpj/thih/thih.pdf
# https://web.cecs.pdx.edu/~mpj/thih/
# https://github.com/wh5a/thih

gv $S/http/www.cse.ogi.edu/~mpj/thih/thihA4.ps
#*
rm -Rv /usr/src/thih/
mkdir  /usr/src/thih/
cd     /usr/src/thih/
tar -xvzf $S/http/www.cse.ogi.edu/~mpj/thih/thih-Sep-1-1999.tar.gz
mv -v thih-Sep-1-1999/* .
rmdir thih-Sep-1-1999/

#*
# This needs a lot of memory, takes ~90s, and its output isn't
# something we can grok immediately.
# (eeman "1 hugs" ":set")
cd /usr/src/thih/
cat > $EEG <<'---'
main
---
eeg hugs -h1000000 SourcePrelude.hs

#*
# (code-c-d "thih" "/usr/src/thih/")
# (find-thihfile "")
# (find-thihfile "Readme")
# (find-thihfile "Readme" "Simple example")




#####
#
# Parsec
# 2000sep19
#
#####

# «parsec»  (to ".parsec")
#*
# Just to check that the binary files are exactly the .pdfs:
unzip -Z -l $S/http/www.cs.uu.nl/~daan/download/parsec/parsec.zip \
  | grep -v '/$' | l -S

#*
rm -Rv /usr/src/Parsec/
cd /usr/src/
unzip -a $S/http/www.cs.uu.nl/~daan/download/parsec/parsec.zip
cd /usr/src/Parsec/
# Remove the redundant docs, leaving only a .html and its equivalent .ps 
rm -v Doc/*.pdf Doc/parsec-letter.ps

#*
cat > $EEG <<'---'
:load Main
main
:q
---
cd /usr/src/Parsec/Examples/Mondrian/
mv Prelude.m prelude.m
eeg hugs -P:/usr/src/Parsec

#*

# (code-c-d "parsec" "/usr/src/Parsec/")
# (find-parsecw3 "Doc/parsec.html")
# (find-parsecfile "")
# (find-parsecfile "Examples/")
# (find-parsecfile "Examples/Mondrian/")




#####
#
# yarrow
# 2001may06
#
#####

# «yarrow»  (to ".yarrow")
#*
rm -Rv /usr/src/yarrow/
mkdir  /usr/src/yarrow/
cd     /usr/src/yarrow/
tar -xvzf $S/http/www.cs.kun.nl/~janz/yarrow/yarrow-src.tar.gz
#*
cd     /usr/src/yarrow/src/
export PATH=$EDRXPATH:/usr/lib/ghc-4.08.1/bin
./ghcYar	|& tee og

#*
# (code-c-d "yarrow" "/usr/src/yarrow/")
# (find-yarrowfile "")




#####
#
# ghc
# 2020aug29
#
#####

# «ghc»  (to ".ghc")
# (find-zsh "installeddebs | sort | grep ghc")
# (find-zsh "availabledebs | sort | grep ghc")

# (find-status   "ghc")
# (find-vldifile "ghc.list")
# (find-udfile   "ghc/")
# (find-status   "ghc-doc")
# (find-vldifile "ghc-doc.list")
# (find-udfile   "ghc-doc/")

file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/Prelude.html




#####
#
# Generic Haskell
# 2001nov02
#
#####

# «gh»  (to ".gh")
#*
rm -Rv /usr/src/gh-0.99/
cd /usr/src/
tar -xvzf $S/http/www.cs.uu.nl/research/projects/generic-haskell/compiler/amber/gh-0.99-source.tar.gz
cd /usr/src/gh-0.99/

./configure |& tee oc
# Needs ghc to compile...

#*
gv /usr/src/gh-0.99/doc/GHUsersGuide.pdf &

#*
# (code-c-d "gh" "/usr/src/gh-0.99/")
# (find-ghfile "")





#####
#
# epigram1
# 2007nov20
#
#####

# «epigram»  (to ".epigram")
# (find-es "agda")
# http://www.e-pig.org/
# http://www.e-pig.org/epigram1.html
# http://www.e-pig.org/downloads/epigram1.tar.gz
# http://www.mail-archive.com/epigram@durham.ac.uk/msg00285.html
#*
rm -Rf ~/usrc/epigram1/
tar -C ~/usrc/ -xvzf \
  $S/http/www.e-pig.org/downloads/epigram1.tar.gz
cd     ~/usrc/epigram1/

cd     ~/usrc/epigram1/src/
make |& tee om

#*
# (code-c-d "epigram" "~/usrc/epigram1/")
# (find-epigramfile "")
# (find-epigramfile "src/om")

# (code-ps "epigramnotes"  "~/usrc/epigram1/docs/epigram-notes.pdf")
# (code-ps "epigramsystem" "~/usrc/epigram1/docs/epigram-system.pdf")
# (find-epigramnotespage  1)
# (find-epigramsystempage 1)

# (find-epigramfile "src/emacs-epigram-interpreted.el")
# (find-epigramfile "src/emacs-epigram.el")
# (find-epigramfile "src/epigram.el")
# (find-epigramfile "src/")

the makefile calls this: "ghc -package lang ...",
which gives this error: "ghc-6.6: unknown package: lang".





#####
#
# multi-line commands in GHCi
# 2009jan21
#
#####

# «multi-line»  (to ".multi-line")
# http://www.haskell.org/ghc/docs/latest/html/users_guide/interactive-evaluation.html
# (find-ghcusrhw3m "ch03s04.html")
# Etch's GHCi doesn't have that, it seems...

To alleviate this issue, GHCi commands can be split over multiple
lines, by wrapping them in :{ and :} (each on a single line of its
own):

Prelude> :{
Prelude| let { g op n [] = n
Prelude|     ; g op n (h:t) = h `op` g op n t
Prelude|     }
Prelude| :}
Prelude> g (*) 1 [1..3]
6

Such multiline commands can be used with any GHCi command, and the
lines between :{ and :} are simply merged into a single line for
interpretation. That implies that each such group must form a single
valid command when merged, and that no layout rule is used. The main
purpose of multiline commands is not to replace module loading but to
make definitions in .ghci-files (see Section 3.9, "The .ghci file")
more readable and maintainable.

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)




#####
#
# runhaskell / runghc
# 2022sep20
#
#####

# «runhaskell»  (to ".runhaskell")
# http://learnyouahaskell.com/input-and-output
# (find-man "1 runhaskell")
# (find-man "1 runghc")



#####
#
# :info
# 2022oct08
#
#####

# «:info»  (to ".:info")
# (find-rwhaskellpage (+ 40 7) "ghci> :info (+)")
# (find-rwhaskelltext (+ 40 7) "ghci> :info (+)")
# (find-rwhaskellpage (+ 40 43) "ghci> :info BookInfo")
# (find-rwhaskelltext (+ 40 43) "ghci> :info BookInfo")

# (find-rwhaskellpage (+ 40 43) "Type Synonyms")
# (find-rwhaskelltext (+ 40 43) "Type Synonyms")




#####
#
# :set+t
# 2022oct08
#
#####

# «:set+t»  (to ".:set+t")
# (find-rwhaskellpage (+ 40 12) ":set +t")
# (find-rwhaskelltext (+ 40 12) ":set +t")
# (find-rwhaskellpage (+ 40 14) ":unset +t")
# (find-rwhaskelltext (+ 40 14) ":unset +t")



#####
#
# main and :main
# 2022oct08
#
#####

# «main»   (to ".main")
# «:main»  (to ".:main")
# (find-rwhaskellpage (+ 40 15) "main =")
# (find-rwhaskelltext (+ 40 15) "main =")
# (find-ghcugdoc "ghci#ghci-cmd-main")
# (find-ghcbasesh "find * | sort | grep 'hs$'")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
main = System.Environment.getArgs >>= print
:main foo bar
:t print
:hoogle getArgs
:info getArgs
:info System.Environment.getArgs

["foo","bar"]

     main = interact wordCount
         where wordCount input = show (length (lines input)) ++ "\n"



#####
#
# getArgs
# 2022oct08
#
#####

# «getArgs»  (to ".getArgs")
# (find-rwhaskellpage (+ 40 71) "import System.Environment (getArgs)")
# (find-rwhaskelltext (+ 40 71) "import System.Environment (getArgs)")
# (find-ghcbasefile "System/Environment.hs")
# (find-ghcbasefile "System/Environment.hs" "-- getArgs, getProgName, getEnv")
# (find-ghcugdoc "ghci#ghci-cmd-main")
# (find-sh "hoogle getArgs")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
main = System.Environment.getArgs >>= print
:main foo bar

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:module +System.Environment
main = getArgs >>= print
:main foo bar



#####
#
# :def
# 2022oct08
#
#####

# «:def»  (to ".:def")
# (to "hoogle-.ghci")
# (find-ghcugdoc "ghci#ghci-cmd-def")





#####
#
# type-signature
# 2022oct08
#
#####

# «type-signature»  (to ".type-signature")
# (find-rwhaskellpage (+ 40 22) "type signature")
# (find-rwhaskelltext (+ 40 22) "type signature")

# (find-rwhaskellpage (+ 40 41) "value constructor")
# (find-rwhaskelltext (+ 40 41) "value constructor")
# (find-rwhaskellpage (+ 40 66) "explicit structuring")
# (find-rwhaskelltext (+ 40 66) "explicit structuring")
# (find-rwhaskellpage (+ 40 103) "As-patterns")
# (find-rwhaskelltext (+ 40 103) "As-patterns")
# (find-rwhaskellpage (+ 40 131) "Creating a Package")
# (find-rwhaskelltext (+ 40 131) "Creating a Package")
# (find-rwhaskellpage (+ 40 152) "Living in an Open World")
# (find-rwhaskelltext (+ 40 152) "Living in an Open World")
# (find-rwhaskellpage (+ 40 170) "main = do")
# (find-rwhaskelltext (+ 40 170) "main = do")
# (find-rwhaskellpage (+ 40 180) "readFile and writeFile")
# (find-rwhaskelltext (+ 40 180) "readFile and writeFile")
# (find-rwhaskellpage (+ 40 182) "Filters with interact")
# (find-rwhaskelltext (+ 40 182) "Filters with interact")




#####
#
# eepitch-hugs
# 2008feb18
#
#####

# «eepitch-hugs»  (to ".eepitch-hugs")
# http://haskell.org/hugs/
# (find-status   "hugs")
# (find-vldifile "hugs.list")
# (find-udfile   "hugs/")
# (find-fline "/usr/lib/hugs/libraries/Hugs/")
# http://www.cs.bham.ac.uk/~mhe/papers/selection-monad.hs
# http://www.cs.bham.ac.uk/~mhe/papers/continuation-monad.hs

# (code-c-d "libhugs" "/usr/lib/hugs/")
# (code-c-d "hugsuserguide" "/usr/lib/hugs/docs/users_guide/")
# (find-libhugsfile "libraries/")
# (find-libhugsfile "libraries/Prelude.hs")
# (find-libhugsfile "libraries/Hugs/")
# (find-libhugsfile "libraries/Hugs/Prelude.hs")
# (find-libhugsfile "docs/users_guide/")
# (find-libhugsw3m  "docs/users_guide/index.html")
# (find-libhugsw3m  "docs/users_guide/using-hugs.html#BASIC-COMMANDS")
# (find-hugsuserguidew3m "using-hugs.html#BASIC-COMMANDS")
# (find-hugsuserguidew3m "options.html#OPTION-98")
# (find-libhugsfile "demos/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
hugs
foldl1 max [10, 20, 30]
foldl1 max [10]
foldl1 max []
foldl1 max ["1", "20", "3"]
:t [10, 20, 30]
:t foldl1
:t foldl1 max
:i foldl1
:?
:quit

hugs -98
:?
:quit

* (eepitch-hugs)
* (eepitch-kill)
* (eepitch-hugs)
:t snd
:t \x -> \f -> f x x
:t \p -> (snd p, fst p)
foldl1 max [10, 20, 30]
foldl1 max [10]
foldl1 max []
foldl1 max ["1", "20", "3"]
*;; foo

# (find-hask98reportw3m "syntax-iso.html#sect9.2")
# (find-hask98reportw3m "syntax-iso.html#sect9.2" "opencom")
# (find-angg "HASKELL/mergesort.hs")






#####
#
# haskell-mode
# 2020apr27 / 2008may23
#
#####

# «haskell-mode»  (to ".haskell-mode")
# (find-angg ".emacs"  "haskell-mode")
# (find-epackage-links 'haskell-mode "haskellmode" t)
# (find-epackage       'haskell-mode)
# (code-c-d "haskellmode" "~/.emacs.d/elpa/haskell-mode-20220529.1859/")
# (find-haskellmodefile "")
# (find-haskellmodenode "")

;; (find-es "haskell" "escape-from-zurg")
;; (find-fline "/tmp/zurg.hs")




#####
#
# Fixing M-e in haskell-mode
# 2022sep20
#
#####

# «haskell-mode-M-e»  (to ".haskell-mode-M-e")
# (find-efunctiondescr 'eval-last-sexp)
# (find-efunction      'eval-last-sexp)
# (find-haskellmodegrep "grep --color=auto -nH --null -e syntax *.el")
# (find-haskellmodegrep "grep --color=auto -nH --null -e forward-sexp-function *.el")
# (find-efunction 'ee-eval-last-sexp-default)
# (find-efunction 'ee-last-sexp)
# (find-efunction 'ee-backward-sexp)
# (find-efunctiondescr 'forward-sexp)
# (find-efunction      'forward-sexp)
# (find-egrep "grep --color=auto -nH --null -e forward-sexp-function *.el */*.el")
# (find-eevfile "ChangeLog" "forward-sexp-function")





#####
#
# Hal Daumé's "Yet Another Haskell Tutorial"
# 2008may23
#
#####

# «daume-yaht»  (to ".daume-yaht")
# http://www.cs.utah.edu/~hal/publications.html
# http://www.cs.utah.edu/~hal/htut/
# http://hal3.name/docs/daume02yaht.pdf
# (code-ps        "daumeyaht" "$S/http/hal3.name/docs/daume02yaht.pdf")
# (code-pdftotext "daumeyaht" "$S/http/hal3.name/docs/daume02yaht.pdf")
# (find-daumeyahtpage 1)
# (find-daumeyahttext)




#####
#
# xmonad
# 2010aug27
#
#####

# «xmonad»  (to ".xmonad")
# (find-status   "xmonad")
# (find-vldifile "xmonad.list")
# (find-udfile   "xmonad/")
# (find-man "1 xmonad")
# (find-man "1 xmonad" "~/.xmonad/xmonad.hs")
# (find-status   "dwm-tools")
# (find-vldifile "dwm-tools.list")
# (find-udfile   "dwm-tools/")
# http://xmonad.org/
# http://en.wikipedia.org/wiki/Xmonad
# http://ubuntu-snippets.blogspot.com/2008/08/xmonad-tiling-window-manager.html
# http://hackage.haskell.org/packages/archive/xmonad/0.9/xmonad-0.9.tar.gz
# http://xmonad.org/documentation.html
# http://haskell.org/haskellwiki/Xmonad/Config_archive
# http://haskell.org/haskellwiki/Xmonad/Config_archive#Minimal_xmonad_config_files
#*
rm -Rv ~/usrc/xmonad-0.9/
tar -C ~/usrc/ -xvzf \
  $S/http/hackage.haskell.org/packages/archive/xmonad/0.9/xmonad-0.9.tar.gz
cd     ~/usrc/xmonad-0.9/

#*
# (code-c-d "xmonad" "~/usrc/xmonad-0.9/")
# (find-xmonadfile "")
# (find-xmonadfile "Main.hs")
# (find-xmonadfile "XMonad.hs")
# (find-xmonadfile "XMonad/")
# (find-xmonadfile "XMonad/Config.hs")
# (find-xmonadfile "XMonad/Core.hs")
# (find-xmonadfile "XMonad/Layout.hs")
# (find-xmonadfile "XMonad/Main.hsc")
# (find-xmonadfile "XMonad/ManageHook.hs")
# (find-xmonadfile "XMonad/Operations.hs")
# (find-xmonadfile "XMonad/StackSet.hs")
# (find-xmonadfile "tests/")
# (find-xmonadfile "tests/Properties.hs")
# (find-xmonadfile "tests/loc.hs")
# (find-xmonadfile "util/")
# (find-xmonadfile "util/GenerateManpage.hs")
#
# (find-xmonadgrep "grep -nirH -e xk_n *")
# (find-xmonadgrep "grep -nirH -e mymodmask *")
# (find-xmonadgrep "grep -nirH -e modmask *")
# (find-xmonadfile "man/")
# (find-xmonadfile "man/xmonad.hs")

# «xmonad-rcfile»  (to ".xmonad-rcfile")
# (find-es "haskell" "xmonad-rcfile")
# http://haskell.org/haskellwiki/Xmonad/Config_archive
# http://haskell.org/haskellwiki/Xmonad/Config_archive/John_Goerzen%27s_Configuration
# (find-xmonadfile "man/xmonad.hs" "windows key" "mod4Mask")
# (find-angg ".xmonad/xmonad.hs")
# (find-man "1 xmonad")
# (find-man "1 xmonad" "~/.xmonad/xmonad.hs")

http://xmonad.org/community.html




#####
#
# Escape from Zurg
# 2010oct15
#
#####

# «escape-from-zurg»  (to ".escape-from-zurg")
# http://www.artisancoder.com/2009/08/escape-from-zurg/
# http://web.engr.oregonstate.edu/~erwig/papers/Zurg_JFP04.pdf
(code-xpdf      "escapefromzurg" "$S/http/web.engr.oregonstate.edu/~erwig/papers/Zurg_JFP04.pdf")
(code-pdftotext "escapefromzurg" "$S/http/web.engr.oregonstate.edu/~erwig/papers/Zurg_JFP04.pdf")
# (find-escapefromzurgpage 1  "Contents")
# (find-escapefromzurgtext "")

http://homepages.inf.ed.ac.uk/wadler/topics/links.html#located-lambda
http://homepages.inf.ed.ac.uk/wadler/topics/links.html

#*
# (eev-bounded)

cat > /tmp/zurg.hs <<'%%%'
type Space m s = [([m],s)]

class SearchProblem s       m where
  trans            ::       s -> [(m,s)]
  isSolution       ::       ([m],s) -> Bool
  space, solutions ::       s -> Space m s

    space s = step ++ expand step
              where step = [ ([m],t) | (m,t) <- trans s ]
                    expand ss = [ (ms++ns,t) | (ms,s) <- ss,
                                               (ns,t) <- space s ]

    solutions = filter isSolution . space

        --  Fig. 2. The SearchProblem type class.


data   Toy = Buzz | Hamm | Rex | Woody         deriving (Eq,Ord,Show)
data   Pos = L | R                             deriving (Eq,Show)
type   Group = [Toy]
type   BridgePos = (Pos,Group)
type   Move = Either Toy Group

toys :: [Toy]
toys = [Buzz,Hamm,Rex,Woody]

time   :: Toy -> Int
time   Buzz = 5
time   Woody = 10
time   Rex   = 20
time   Hamm = 25

duration :: [Move] -> Int
duration = sum . map (either time (maximum.map time))

backw :: Group -> [(Move,BridgePos)]
backw xs = [(Left x,(L,sort (x:(toys \\ xs)))) | x <- xs]

forw :: Group -> [(Move,BridgePos)]
forw xs = [(Right [x,y],(R,delete y ys)) |
              x <- xs,let ys=delete x xs, y <- ys, x<y]

instance SearchProblem BridgePos Move where
  trans (L,l) = forw l
  trans (R,l) = backw (toys \\ l)
  isSolution (ms,s) = s == (R,[]) && duration ms <= 60

solution = solutions (L,toys)

      --  Fig. 3. Haskell solution for the Zurg riddle.
%%%

#*
(defun eepitch-hugs () (interactive) (eepitch-comint "hugs" "hugs"))
(defun eepitch-hugs98 () (interactive) (eepitch-comint "hugs" "hugs -98"))

* (eepitch-hugs)
* (eepitch-kill)
* (eepitch-hugs)
:?
:load /tmp/zurg.hs

* (eepitch-hugs98)
* (eepitch-kill)
* (eepitch-hugs98)
:?
:load /tmp/zurg.hs




#####
#
# Haskell <-> Lua
# 2011nov21
#
#####

# «luautils»  (to ".luautils")
# http://hackage.haskell.org/package/luautils-0.1
# http://hackage.haskell.org/package/hslua-0.3.4

2021oct26:
[HsLua]: https://hslua.org
[pandoc]: https://pandoc.org
[Lua filters]: https://pandoc.org/lua-filters.html




#####
#
# Proof of (Pv(Q&R))<-((PvQ)&(PvR))
# 2015jul01
#
#####

# «distributivity» (to ".distributivity")
# https://mail.google.com/mail/ca/u/0/#search/joaoraf%40gmail.com/FMfcgxmLbbKqmkBXSftpXSPJjMQtfdfn
# Thx to João Rafael Nicola

{-# LANGUAGE TypeOperators #-}

data a * b = a :* b
data a + b = InL a | InR b

proof :: (p + q) * (p + r) -> p + (q * r)
proof (pOrQ :* pOrR) = 
  case  pOrQ of 
    InL p -> InL p 
    InR q -> 
      case pOrR of 
        InL p -> InL p
    InR r -> InR (q :* r)



#####
#
# cabal
# 2019may18
#
#####

# «cabal» (to ".cabal")
# (find-es "cabal" "cabal-install-2022")
# (find-es "agda" "cabal-agda")
# https://agda.readthedocs.io/en/v2.6.0.1/getting-started/installation.html#installation-from-hackage
# https://agda.readthedocs.io/en/v2.6.0.1/getting-started/what-is-agda.html
# (find-zsh "installeddebs | sort | grep cabal")
# (find-zsh "availabledebs | sort | grep cabal")
# (find-status   "cabal-install")
# (find-vldifile "cabal-install.list")
# (find-udfile   "cabal-install/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti cabal-install

cabal install Cabal cabal-install

cabal install parsec
ghc-pkg check

cabal update
cabal install Agda
cabal install alex
cabal install happy
cabal install Agda



# (find-sh "cabal list")

# (find-fline "~/.cabal/")
# (find-fline "~/.cabal/packages/hackage.haskell.org/")
# (find-fline "~/.cabal/logs/Agda-2.6.0.1.log")
# (find-fline "~/.cabal/bin/")
# (find-fline "~/.cabal/bin/" "agda-mode")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
export PATH=$HOME/.cabal/bin;$PATH
agda-mode
agda-mode locate
agda-mode locate; echo

# agda-mode setup
# -> agda-mode: emacs: rawSystem: runInteractiveProcess: exec: does
#    not exist (No such file or directory)

# https://github.com/agda/agda/tree/master/doc/user-manual
# https://github.com/agda/agda/tree/master/doc/user-manual
# (find-git-links "https://github.com/agda/agda/tree/master/doc/user-manual" "user-manual")

# (find-sh "cabal --help")



#####
#
# Adding ~/.cabal/bin/ to the PATH (for Agda and Idris)
# 2019jun06
#
#####

# «cabal-PATH» (to ".cabal-PATH")
# (find-angg ".emacs" "cabal-path")
# (find-angg ".zshrc" "cabal")
# (find-fline "~/.cabal/bin/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
which agda
export PATH=$HOME/.cabal/bin:$PATH
which agda

echo $HOME




#####
#
# hackage
# 2019may18
#
#####

# «hackage» (to ".hackage")
# https://en.wikipedia.org/wiki/Haskell_(programming_language)
# http://hackage.haskell.org/
# https://hackage.haskell.org/package/Agda

# (find-zsh "installeddebs | sort | grep hackage")
# (find-zsh "availabledebs | sort | grep hackage")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
hackage




#####
#
# lhs2tex
# 2019oct23
#
#####

# «lhs2tex» (to ".lhs2tex")
# (find-status   "lhs2tex")
# (find-vldifile "lhs2tex.list")
# (find-udfile   "lhs2tex/")
# http://hackage.haskell.org/package/lhs2tex
# https://www.andres-loeh.de/lhs2tex/
# https://github.com/kosmikus/lhs2tex





#####
#
# haskell-platform
# 2019nov15
#
#####

# «haskell-platform» (to ".haskell-platform")
# (find-es "idris" "idris-on-debian")
# (find-status   "haskell-platform")
# (find-vldifile "haskell-platform.list")
# (find-udfile   "haskell-platform/")
# http://hackage.haskell.org/platform/





#####
#
# Fong, Milewski, Spivak: 18.S097: Programming with Categories
# 2020jan24
#
#####

# «programming-cats» (to ".programming-cats")
# http://brendanfong.com/programmingcats.html
# http://brendanfong.com/programmingcats_files/flyer.pdf
# http://brendanfong.com/programmingcats_files/cats4progs-DRAFT.pdf




#####
#
# The category Hask
# 2020mar28
#
#####

# «Hask» (to ".Hask")
# https://www.reddit.com/r/haskell/comments/4wk0gs/hask_is_not_a_category/





#####
#
# books-about-haskell
# 2020apr27
#
#####

# «books-about-haskell» (to ".books-about-haskell")
# https://bitemyapp.com/blog/functional-education/
# http://learnyouahaskell.com/
# http://learnyouahaskell.com/chapters
# http://learnyouahaskell.com/introduction#what-you-need
# https://wiki.haskell.org/Books
# https://www.manning.com/books/get-programming-with-haskell

apti haskell-platform




#####
#
# Learning Haskell - by Gabriele Keller and Manuel M T Chakravarty
# 2020aug29
#
#####

# «learn-hfm»  (to ".learn-hfm")
# http://learn.hfm.io/
# http://learn.hfm.io/fractals.html





#####
#
# haskell-stack
# 2020aug02
#
#####

# «haskell-stack»  (to ".haskell-stack")
# (find-es "stack")




#####
#
# stridi (by Guillaume Boisseau)
# 2020aug02
#
#####

# «stridi»  (to ".stridi")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/stridi/
cd      ~/usrc/
git clone https://github.com/Nadrieril/stridi
cd      ~/usrc/stridi/

export PAGER=cat
git branch --list -a
git for-each-ref
git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/stridi/")
# (find-gitk  "~/usrc/stridi/")

# (code-c-d "stridi" "~/usrc/stridi/")
# (find-stridish "find * | sort")
# (find-stridifile "")
# (find-stridifile "test.hs")

# cd ~/usrc/stridi/
# stack build

cabal install singletons
cabal install HaTeX
cabal install extra

cd      ~/usrc/stridi/
git reset
cabal build    |& tee ocb

ghci test.hs

cabal run test.hs

cabal update
# (find-sh "cabal --help")



#####
#
# diagrams
# 2020aug02
#
#####

# «diagrams»  (to ".diagrams")
# https://hackage.haskell.org/package/diagrams
# https://archives.haskell.org/projects.haskell.org/diagrams/gallery.html
# http://ozark.hendrix.edu/~yorgey/pub/diagrams-FARM-15.pdf
# https://diagrams.github.io/gallery/HexVariation.html

cabal update && cabal install diagrams

# (find-cabal-links  "diagrams")
# (find-cabal-unpack "diagrams")
# (code-c-d "diagrams" "~/usrc/diagrams-1.4.0.1/")
# (find-diagramsfile "")

https://www.youtube.com/watch?v=ud_xnX9uixg
https://byorgey.wordpress.com/2012/08/28/creating-documents-with-embedded-diagrams/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/HASKELL/DIAGRAMS/
cabal build
cabal exec diagrams-tutorial -- -o circle.svg -w 400

# (find-fline "~/HASKELL/DIAGRAMS/")





#####
#
# hutton-book
# 2020oct11
#
#####

# «hutton-book»  (to ".hutton-book")
# (find-books "__comp/__comp.el" "haskell-hutton")
# http://www.cs.nott.ac.uk/~pszgmh/Code.zip

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/usrc/hutton-book/")
rm -Rv ~/usrc/hutton-book/
mkdir  ~/usrc/hutton-book/
cd     ~/usrc/hutton-book/
unzip $S/http/www.cs.nott.ac.uk/~pszgmh/Code.zip
cd     ~/usrc/hutton-book/Code/

# (code-c-d "huttonbook" "~/usrc/hutton-book/Code/")
# (find-huttonbookfile "")
# (find-huttonbookfile "tictactoe.hs")

5: # (find-huttonbookfile "cipher.hs")
7: # (find-huttonbookfile "transmit.hs")
7: # (find-huttonbookfile "voting.hs")
8: # (find-huttonbookfile "machine.hs")
8: # (find-huttonbookfile "tautology.hs")
9: # (find-huttonbookfile "countdown.hs")
9: # (find-huttonbookfile "countdown2.hs")
10: # (find-huttonbookfile "hangman.hs")
10: # (find-huttonbookfile "life.hs")
10: # (find-huttonbookfile "nim.hs")
11: # (find-huttonbookfile "tictactoe.hs")
12: # (find-huttonbookfile "relabel.hs")
13: # (find-huttonbookfile "Parsing.hs")
13: # (find-huttonbookfile "calculator.hs")
13: # (find-huttonbookfile "expression.hs")
16: # (find-huttonbookfile "compiler.hs")
16: # (find-huttonbookfile "primes.hs")
17: # (find-huttonbookfile "compiler2.hs")

# (find-huttonbooktext   6 "Contents")





#####
#
# typing-the-composition
# 2021jan07
#
#####

# «typing-the-composition»  (to ".typing-the-composition")

<edrx> hi people, I have some background on type systems related to
       the lambda-cube and I am now trying to understand Haskell...
       what are your favorite presentations of the translation of the
       Hindley-Milner type system to systems in which the type
       variables are explicit? I think that I know how to do the
       translation "by common sense", and I have tested my ideas on a
       few definitions in the prelude... but I am not totally sure if
       it works on classes - I started to translate, or to "fully
       type", Functor and fmap explicitly, but my typing diagrams got
       quite big, and I guess that I would make better use of my time
       by reading what is the standard way to do that...

file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/Prelude.html#g:10
file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/src/GHC-Base.html#fmap
file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/src/GHC-Base.html#fmap
file:///usr/share/doc/ghc-doc/



#####
#
# typing-do-notation
# 2021jan10
#
#####

# «typing-do-notation»  (to ".typing-do-notation")
# (find-huttonbookpage 196 "m1 >>= \\x1 ->")
# (find-huttonbooktext 196 "m1 >>= \\x1 ->")
# (find-anggfile "HASKELL/DoNotation1.hs")

  do va <- tma
     vb <- tmb
     vc <- tmc
     tmd

  tma >>= \va ->
  tmb >>= \vb ->
  tmc >>= \vc ->
  tmd

  tma   >>= \va  -> tmb   >>= \vb  -> tmc   >>= \vc   -> tmd
  =====      ===    =====      ===    =====      ====    =====
  ::m a      ::a    ::m b      ::b    ::m c      :: c    ::m d
                                                ==============
                                                ::c->m d
                                      ========================
                                                         ::m d
                              ================================
                              ::b->m d
                    ==========================================
                                                         ::m d
            ==================================================
            ::a->m d
  ============================================================
                                                         ::m d


return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b


This:

  m1     >>= \ x1   -> m2     >>= \ x2   -> f                 x1   x2
  ------       ----    ------       ----    ----------------  ---- ----
  :: m a       :: a    :: m b       :: b    :: a -> b -> m c  :: a :: b
                                            ----------------------
                                            :: b -> m c
                                            ---------------------------
                                            :: m c                     
                                  -------------------------------------
                                  :: b -> m c
                       ------------------------------------------------
                       :: m c
             ---------------------------------------------------------- 
             :: a -> m c
  ---------------------------------------------------------------------
  :: m c

is the core version of this:

  do x1   <- m1    , x2   <- m2    , f                 x1   x2  
     ----    ------  ----    ------  ----------------  ---- ----
     :: a    :: m a  :: b    :: m b  :: a -> b -> m c  :: a :: b
                                     ----------------------     
                                     :: b -> m c                      
                                     ---------------------------
                                     :: m c                     
  --------------------------------------------------------------
  :: m c


if we invert the "<-"s, then the "do" above becomes this, that can be
typed easily:

 do m1     -> x1  , m2     -> x2  , f                 x1   x2  
    ------    ----  ------    ----  ----------------  ---- ----
    :: m a    :: a  :: m b    :: b  :: a -> b -> m c  :: a :: b
                                    ----------------------     
                                    :: b -> m c                
                                    ---------------------------
                                    :: m c                     
                              ---------------------------------
                              :: b -> m c
                    -------------------------------------------
                    :: m c
              -------------------------------------------------
              :: a -> m c
    -----------------------------------------------------------
    :: m c
 --------------------------------------------------------------
 :: m c





#####
#
# haskell-to-core
# 2021jan07
#
#####

# «haskell-to-core»  (to ".haskell-to-core")
# http://www.youtube.com/watch?v=fty9QL4aSRc Vladislav Zavialov - Haskell to Core: Understanding Haskell Features Through Their Desugaring
# (find-youtubedl-links "/sda5/videos/" nil "fty9QL4aSRc" nil "{stem}")
# (find-youtubedl-links "/sda5/videos/" "Vladislav_Zavialov_-_Haskell_to_Core_-_Understanding_Haskell_Features_Through_Their_Desugaring" "fty9QL4aSRc" ".mkv" "hstocore")
# (code-youtube "hstocore" "fty9QL4aSRc" "Vladislav Zavialov - Haskell to Core: Understanding Haskell Features Through Their Desugaring")
# (code-video "hstocorevideo" "/sda5/videos/Vladislav_Zavialov_-_Haskell_to_Core_-_Understanding_Haskell_Features_Through_Their_Desugaring-fty9QL4aSRc.mkv")
# (code-video "hstocorevideo" "/home/videos/Vladislav_Zavialov_-_Haskell_to_Core_-_Understanding_Haskell_Features_Through_Their_Desugaring-fty9QL4aSRc.mkv")
# (find-hstocorevideo "0:00")
# (find-hstocorevideo "1:51" "Hi everyone")
# (find-hstocorevideo "2:15" "desugaring definition ***")
# (find-hstocorevideo "3:12" "lexical analysis")
# (find-hstocorevideo "4:40" "name resolution")
# (find-hstocorevideo "5:12" "type checking")
# (find-hstocorevideo "5:30" "GHC pipeline")
# (find-hstocorevideo "6:14" "Haskell syntax")
# (find-hstocorevideo "7:01" "Haskell syntax 2: Expr.hs")
# (find-hstocorevideo "7:40" "browse the compiler GHC directory")
# (find-hstocorevideo "7:45" "core")
# (find-hstocorevideo "8:35" "pretend that core is a subset of Haskell")
# (find-hstocorevideo "9:01" "if you want to learn more")
# (find-hstocorevideo "9:14" "desugaring by example")
# (find-hstocorevideo "9:30" "Type information")
# (find-hstocorevideo "9:55" "function bindings")
# (find-hstocorevideo "10:33" "no separate type signatures")
# (find-hstocorevideo "11:13" "Multi-argument function bindings")
# (find-hstocorevideo "11:20" "all lambdas are single-argument")
# (find-hstocorevideo "11:56" "all lambdas are single-argument 2")
# (find-hstocorevideo "12:05" "pattern bindings")
# (find-hstocorevideo "13:18" "operator sections")
# (find-hstocorevideo "13:35" "pattern matching")
# (find-hstocorevideo "14:27" "pattern matching 2")
# (find-hstocorevideo "15:19" "lambda case")
# (find-hstocorevideo "15:28" "if-then-else")
# (find-hstocorevideo "15:39" "multi-way if")
# (find-hstocorevideo "15:44" "the seq function")
# (find-hstocorevideo "16:11" "bang patterns")
# (find-hstocorevideo "16:30" "parametric polymorphism")
# (find-hstocorevideo "17:16" "parametric polymorphism 2")
# (find-hstocorevideo "17:29" "the type argument and the value argument")
# (find-hstocorevideo "17:57" "parametric polymorphism 3")
# (find-hstocorevideo "18:13" "existential quantification ***")
# (find-hstocorevideo "20:12" "Classes (dictionary passing)")
# (find-hstocorevideo "21:00" "$dNum is a dictionaty that contains")
# (find-hstocorevideo "21:45" "Classes (dictionary passing) 2")
# (find-hstocorevideo "22:29" "do notation")
# (find-hstocorevideo "23:07" "do notation 2")
# (find-hstocorevideo "24:22" "Coercions and casts")
# (find-hstocorevideo "24:47" "Coercions and casts 2")
# (find-hstocorevideo "26:14" "Coercions and casts 3")
# (find-hstocorevideo "27:15" "GADTs")
# (find-hstocorevideo "29:37" "TypeFamilies")
# (find-hstocorevideo "30:36" "Coercions")
# (find-hstocorevideo "31:08" "Coercions")

return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b





#####
#
# haskell-report
# 2021jan14
#
#####

# «haskell-report»  (to ".haskell-report")
# https://www.haskell.org/documentation/
# (find-git-links "https://github.com/haskell/haskell-report" "haskellreport")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/haskell-report/
cd      ~/usrc/
# git clone -b h2010 https://github.com/haskell/haskell-report
git   clone          https://github.com/haskell/haskell-report
cd      ~/usrc/haskell-report/

git clean -dfx
git reset --hard

export PAGER=cat
git branch --list -a
git for-each-ref
git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/haskell-report/")
# (find-gitk  "~/usrc/haskell-report/")

# (code-c-d "haskellreport" "~/usrc/haskell-report/")
# (find-haskellreportfile "")
# (find-haskellreportfile "README")
# (find-haskellreportfile "report/README")
# (find-haskellreportfile "report/")
# (find-haskellreportfile "report/om")
# (find-haskellreportfile "report/decls.tex" "Datatype Renamings")
# (find-haskellreportfile "report/decls.verb" "Datatype Renamings")

cd ~/usrc/haskell-report/tools/
make |& tee om


cd ~/usrc/haskell-report/report/
patch haskell.verb <<'%%%'
10c10,12
< \usepackage[bookmarks=true]{hyperref}
---
> %\usepackage[bookmarks=true]{hyperref}
> \usepackage[colorlinks,citecolor=DarkRed,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref")
> \usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor")
%%%

# (find-haskellreportfile "report/haskell.verb")

cd ~/usrc/haskell-report/report/
make |& tee om

# (find-fline    "~/usrc/haskell-report/report/")
# (find-pdf-page "~/usrc/haskell-report/report/classes.pdf")
# (code-pdf-page "haskellreport" "~/usrc/haskell-report/report/haskell.pdf")
# (code-pdf-text "haskellreport" "~/usrc/haskell-report/report/haskell.pdf" 20)
# (find-haskellreportpage)
# (find-haskellreporttext)
# (find-haskellreportpage 3 "Contents")
# (find-haskellreporttext 3 "Contents")
# (find-haskellreportpage (+ 20 43) "4.2.3    Datatype Renamings")
# (find-haskellreporttext (+ 20 43) "4.2.3    Datatype Renamings")
# (find-haskellreportgrep "grep --color=auto -niHR --null -e 'translation of list comprehensions' *")



#####
#
# where
# 2021jan18
#
#####

# «where»  (to ".where")
# (find-huttonbookpage 37 "The layout rule" "where")
# (find-huttonbooktext 37 "The layout rule" "where")




#####
#
# foldr
# 2021jan18
#
#####

# «foldr»  (to ".foldr")
# (find-books "__comp/__comp.el" "haskell-hutton")
# (find-huttonbookpage 100 "7.3    The foldr function")
# (find-huttonbooktext 100 "7.3    The foldr function")
# (find-ghcfile "libraries/base/GHC/List.hs" "foldr1 f = go")
# (find-ghcfile "libraries/base/GHC/List.hs" "foldr2 k z = go")
# file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/src/GHC-Base.html#foldr
# (find-ghcfile "libraries/base/Data/Foldable.hs")
# (find-ghcsh "find * | sort")
# (find-ghcfile "")
# (find-ghcfile "libraries/base/")
# (find-ghcgrep "grep --color -nRH --null -e foldr libraries/base/*")
# (find-ghcgrep "grep --color -nRH --null -e 'foldr ' libraries/base/*")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
foldr  (\a b -> "<"++a++b++">") "!" ["a", "b", "c", "d"]
** --> "<a<b<c<d!>>>>"
foldr1 (\a b -> "<"++a++b++">")     ["a", "b", "c", "d"]
** --> "<a<b<cd>>>"

foldl  (\a b -> "<"++a++b++">") "!" ["a", "b", "c", "d"]
** --> "<<<<!a>b>c>d>"
foldl1 (\a b -> "<"++a++b++">")     ["a", "b", "c", "d"]
** --> "<<<ab>c>d>"
foldl1 (\a b -> "<"++a++b++">")     ["a"]
** --> "a"




#####
#
# tuples
# 2021jan25
#
#####

# «tuples»  (to ".tuples")
# (find-ghcfile "libraries/base/Prelude.hs" "*** Tuples" "fst, snd")
# (find-ghcfile "libraries/base/Data/Tuple.hs" "fst (x,_)")
# (find-ghcfile "libraries/base/Data/Tuple.hs" "snd (_,y)")



#####
#
# Monomorphism restriction
# 2021jan26
#
#####

# «monomorphism-restriction»  (to ".monomorphism-restriction")
# https://wiki.haskell.org/Monomorphism_restriction
# https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-930004.5.5




#####
#
# translating the tree for (Ax)_1
# 2021jan27
#
#####

# «translating-Ax»  (to ".translating-Ax")
# (find-fline "~/LOGS/2021jan27.haskell")
# http://math.andrej.com/2012/12/25/free-variables-are-not-implicitly-universally-quantified/

atimes :: (b -> c) -> ((a,b) -> (a,c))
atimes btoc = abtoac where
  abtoac ab = ac where
    a = fst ab
    b = snd ab
    c = btoc b
    ac = (a,c)

--              [ab]^1
--              ------snd                     a = fst ab
--   [ab]^1        b        btoc              b = snd ab
--   ------fst     -------------app           c = btoc b
--     a                c                     ac = (a,c)
--     ------------------(,)                  abtoac = \ ab -> ac
--        ac                                  atimes = \ btoc -> abtoac
--     ------lambda
--     abtoac
--
--     ^atimes




#####
#
# lawvere
# 2021feb17
#
#####

# «lawvere»  (to ".lawvere")
# (find-git-links "https://github.com/jameshaydon/lawvere" "lawvere")






#####
#
# hoodle
# 2021sep23
#
#####

# «hoodle»  (to ".hoodle")
# https://github.com/wavewave/hoodle
# (find-git-links "https://github.com/wavewave/hoodle" "hoodle")
# (code-c-d "hoodle" "~/usrc/hoodle/")
# (find-hoodlefile "")
# (find-hoodlefile "xournal-parser/src/Text/Xournal/Parse/Conduit.hs")
# (find-hoodlefile "xournal-parser/src/Text/Xournal/Parse.hs")




#####
#
# libtinfo-missing
# 2021nov23
#
#####

# «libtinfo-missing»  (to ".libtinfo-missing")
# /home/edrx/.ghcup/ghc/8.8.4/lib/ghc-8.8.4/bin/ghc: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
# https://forum.cardano.org/t/error-127-installing-ghc-libtinfo-so-5-missing/60408

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti libtinfo5




#####
#
# music
# 2021dec20
#
#####

# «music»  (to ".music")
# https://news.ycombinator.com/item?id=29609395 The Haskell School of Music (2012) [pdf] (yale.edu)




#####
#
# calling-lua
# 2022jul14
#
#####

# «calling-lua»  (to ".calling-lua")
# (find-anggfile "HASKELL/Process1.hs")
# (find-ghc-links "System.Process")
# (find-ghcbasesh "find * | sort | grep 'System.Process'")
# (find-ghcbasesh "find * | sort | grep 'System'")

hi all! I draw most of my LaTeX diagrams using this -
http://angg.twu.net/dednat6/tug-slides.pdf - that is written in Lua,
and I realized that many diagrams that I need would be easier to draw
by using Haskell to generate Lua code... anyway, my beginner question
of the day is: how do I write a function in Haskell that runs an
external program with some input? for example, myfunction "foo" would
run something roughly equivalent to "echo 'foo' | luaprogram.lua" and
would return the output of that...

# (find-fline "~/LOGS/2022jul14.haskell" "you probably need uniq")

<[exa]> edrx: System.Process seems to have pretty well wrapped
        facilities
<[exa]> edrx: here
        https://hackage.haskell.org/package/process-1.6.14.0/docs/System-Process.html

# (find-sh "locate -i haskell")
# (find-sh "locate -i ghc")
# (find-sh "locate -i ghc | grep -i process")
# (find-sh "locate -i ghc | grep -i system")
# (find-sh "locate -i ghc | grep -i system | grep IO")
# (code-c-d "ghcprocess" "~/bigsrc/ghc-8.10.3/libraries/process/System/")
# (find-ghcprocessfile "")



#####
#
# System.IO
# 2022sep19
#
#####

# «System.IO»  (to ".System.IO")
# (find-sh "locate -i ghc | grep -i system | grep IO")
# (find-sh "locate -i ghc | grep -i system | grep Dire")
# (find-ghcsh "find * | sort | grep System | grep IO")
# (find-ghcsh "find * | sort | grep System | grep Directory")
# (find-ghcfile "libraries/base/System/IO.hs")
# (find-ghcfile "libraries/base/System/IO/")
# (find-ghcfile "libraries/directory/System/Directory.hs")
# (find-ghcfile "libraries/directory/System/Directory/")
# (find-hoogle "getCurrentDirectory")

module OCHS where
import System.IO
import System.Directory

writeFilein :: String -> IO ()
writeFilein xs = do 
                 curPath <- getCurrentDirectory
                 createDirectoryIfMissing False (curPath ++ "\\temp")
                 absPath <- makeAbsolute "\\temp"
                 writeFile (absPath ++ "\\in.txt") xs

readFileout :: IO ()
readFileout = do absPath <- makeAbsolute "\\temp\\out.txt"
                 xs <- (readFile' absPath)
                 print xs

# (find-sh "hoogle createDirectoryIfMissing")
# (find-sh "hoogle ++")
# (find-sh "hoogle ++ --count=2000")
# (find-sh "hoogle '(++)' --count=2000")



#####
#
# pipes
# 2022sep20
#
#####

# «pipes»  (to ".pipes")
# (find-cabal-links  "pipes")
# (find-cabal-unpack "pipes")
# (code-c-d "pipes" "~/usrc/pipes-4.3.16/")
# (find-pipesfile "")
# (find-pipesfile "src/Pipes.hs" "for ::")
# (find-pipesfile "src/Pipes/")
# (find-pipesfile "src/Pipes/Prelude.hs")
# (find-pipesfile "src/Pipes/Prelude.hs" "Use 'for' loops")
# (find-pipesfile "src/Pipes/Prelude.hs" "'Pipe' to a bidirectional 'Proxy'")
# (find-pipesfile "src/Pipes/Tutorial.hs")
# (find-pipesfile "src/Pipes/Tutorial.hs" "If you want a Quick Start")
# (find-pipesfile "src/Pipes/Tutorial.hs" "'Proxy' type")
# (find-pipesfile "tests/")
# (find-pipesfile "tests/Main.hs")

https://hackage.haskell.org/package/pipes-4.3.16/docs/Pipes-Tutorial.html
https://hackage.haskell.org/package/pipes-4.3.16/docs/Pipes-Core.html#t:Pipe
https://hackage.haskell.org/package/pipes-4.3.16/docs/Pipes-Prelude.html


# (find-books "__comp/__comp.el" "haskell-rw")
# (find-books "__comp/__comp.el" "haskell-rw" "Extended Example: Piping")
# (find-rwhaskellpage (+ 40 476)  "Extended Example: Piping")
# (find-rwhaskelltext (+ 40 476)  "Extended Example: Piping")
# (find-ghcsh "find * | sort | grep System | grep Process")
# (find-ghcsh "find * | sort | grep System | grep Posix")
# (find-ghcsh "find * | sort | grep System | grep -i Posix")
# (find-ghcfile "libraries/process/System/Process.hs")
# (find-ghcfile "libraries/process/System/Process/")
# (find-ghcfile "libraries/process/System/Process/Posix.hs")
# (find-ghcfile "libraries/unix/dist-install/build/System/Posix/Process.hs")
# (find-ghcsh "find * | sort | grep System | grep Pipes")

https://hackage.haskell.org/package/Pipe-1.0/docs/System-Process-Pipe.html

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cabal install pipes
cabal install conduit
cabal install machines

# (find-cabal-links "pipes")
# (find-cabal-links "conduit")
# (find-cabal-links "machines")

# (find-sh "eev-cabal cabal_tgz_unpack pipes")
# (find-sh "eev-cabal cabal_tgz_unpack conduit")
# (find-sh "eev-cabal cabal_tgz_unpack machines")
# (find-sh "eev-cabal cabal_tgz_unpack kan-extensions")
# (find-sh "eev-cabal cabal_tgz_unpack adjunctions")
# (find-sh "eev-cabal cabal_tgz_unpack profunctors")

# (code-c-d "pipes" "~/usrc/pipes-4.3.16/")
# (find-pipesfile "")

# (code-c-d "conduit" "~/usrc/conduit-1.3.4.2/")
# (find-conduitfile "")


particular fits into the ecosystem, see [the conduit
homepage](https://github.com/snoyberg/conduit#readme).

echo a b c ddd eee | cut -d' ' -f 2-3
# (find-man "cut")






#####
#
# kan-extensions
# 2022sep20
#
#####

# «kan-extensions»  (to ".kan-extensions")
# (find-cabal-links  "kan-extensions")
# (find-cabal-unpack "kan-extensions")
# (find-cabal-links  "adjunctions")
# (find-cabal-unpack "adjunctions")
# (find-cabal-links  "profunctors")
# (find-cabal-unpack "profunctors")
# http://github.com/ekmett/kan-extensions/
# http://github.com/ekmett/adjunctions/
# http://github.com/ekmett/profunctors/
# (code-c-d "kanextensions" "~/usrc/kan-extensions-5.2.5/")
# (code-c-d "adjunctions" "~/usrc/adjunctions-4.4.2/")
# (code-c-d "profunctors" "~/usrc/profunctors-5.6.2/")
# (find-kanextensionsfile "")
# (find-adjunctionsfile "")
# (find-profunctorsfile "")

# (find-kanextensionssh "find * | sort")
# (find-kanextensionsfile "src/Data/Functor/Yoneda.hs")







#####
#
# hsc2hs
# 2022sep20
#
#####

# «dist-install»  (to ".dist-install")
# «hsc2hs»       (to ".hsc2hs")
# (find-ghcfile "libraries/unix/dist-install/build/System/Posix/IO.hs")
# (find-ghcfile "libraries/unix/System/Posix/IO.hsc")
# (find-ghcfile "omh")
# (find-ghcfile "omh" "libraries/unix/./System/Posix/IO.hsc")
# (find-ghcfile "omh" "hsc2hs")
# (find-ghcfile "libraries/unix/")
# (find-ghcfile "libraries/unix/README.md")
# (find-ghcfile "omh" "hsc2hs")
# (find-sh "locate hsc2hs")
# (find-ghcfile "utils/hsc2hs/")
# (find-ghcfile "utils/hsc2hs/README.rst")
# (find-ghcfile "utils/hsc2hs/Main.hs")




#####
#
# Tagless-final style
# 2022sep15
#
#####

# «tagless»  (to ".tagless")
# https://okmij.org/ftp/meta-programming/index.html
# https://okmij.org/ftp/tagless-final/tagless-typed.html
# https://okmij.org/ftp/tagless-final/
# https://okmij.org/ftp/tagless-final/course/lecture.pdf
# https://okmij.org/ftp/tagless-final/JFP.pdf
# https://okmij.org/ftp/tagless-final/course/index.html#lecture
# https://okmij.org/ftp/typed-formatting/FPrintScan.html#DSL-In
# https://okmij.org/ftp/typed-formatting/FPrintScan.html#DSL-FIn
# https://okmij.org/ftp/tagless-final/#course-oxford
# https://markkarpov.com/tutorial/generics.html




#####
#
# AD.hs - Automatic Differentiation in 38 lines of Haskell
# 2022sep18
#
#####

# «AD.hs»  (to ".AD.hs")
https://news.ycombinator.com/item?id=32879734 Automatic Differentiation in 38 lines of Haskell (gist.github.com) ******
https://gist.github.com/ttesmer/948df432cf46ec6db8c1e83ab59b1b21
https://gist.github.com/ttesmer/948df432cf46ec6db8c1e83ab59b1b21#file-example-md
http://conal.net/papers/beautiful-differentiation/
http://conal.net/papers/beautiful-differentiation/beautiful-differentiation.pdf
http://conal.net/papers/beautiful-differentiation/beautiful-differentiation-long.pdf
http://conal.net/papers/beautiful-differentiation/beautiful-differentiation-slides.pdf
http://conal.net/blog/posts/paper-beautiful-differentiation
http://conal.net/talks/beautiful-differentiation.pdf

(code-pdf-page "bdslides" "$S/http/conal.net/papers/beautiful-differentiation/beautiful-differentiation-slides.pdf")
(code-pdf-text "bdslides" "$S/http/conal.net/papers/beautiful-differentiation/beautiful-differentiation-slides.pdf")
;; (find-bdslidespage)
;; (find-bdslidestext)



#####
#
# etags
# 2022sep18
#
#####

# «etags»  (to ".etags")
# (find-fline "~/LOGS/2022sep18.haskell")
# (find-fline "~/LOGS/2022sep18.haskell" "haskell etags")
# (find-fline "~/LOGS/2022sep18.haskell" "install ghcup, then")
# (to "cabal")

<sclv> https://hackage.haskell.org/package/hs-tags and
       https://hackage.haskell.org/package/hasktags are the two
       common tags generators iirc

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo apt-get install cabal
cabal update
cabal install hs-tags
cabal-install hs-tags



#####
#
# hasktags
# 2022sep21
#
#####

# «hasktags»  (to ".hasktags")
# (find-cabal-links  "hasktags")
# (find-cabal-unpack "hasktags")
# http://github.com/MarcWeber/hasktags
# (code-c-d "hasktags" "~/usrc/hasktags-0.72.0/")
# (find-hasktagsfile "")

# (find-fline "~/usrc/pipes-4.3.16/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/pipes-4.3.16/
hasktags --etags .
hasktags --etags

cd ~/usrc/pipes-4.3.16/src/
hasktags --etags .
laf

# (find-fline "~/usrc/pipes-4.3.16/src/")

# https://hackage.haskell.org/package/hasktags-0.72.0/docs/Hasktags.html#v:dirToFiles
# (find-fline "~/LOGS/2022sep21.haskell" "only scans the directory")



#####
#
# hs-tags
# 2022sep21
#
#####

# «hs-tags»  (to ".hs-tags")
# (find-cabal-links  "hs-tags")
# (find-cabal-unpack "hs-tags")




#####
#
# hoogle
# 2022sep18
#
#####

# «hoogle»  (to ".hoogle")
# (find-angg ".emacs" "hoogle")
# (find-cabal-links  "hoogle")
# (find-cabal-unpack "hoogle")
# (find-git-links "https://github.com/ndmitchell/hoogle" "hoogle")
# (code-c-d "hoogle" "~/usrc/hoogle-5.0.18.3/")
# (code-c-d "hoogle" "~/usrc/hoogle/")
# (find-hooglefile "")
# (find-hoogle "guard")

# (find-fline "~/LOGS/2022sep18.haskell" "https://hoogle.haskell.org")
# (find-angg "HASKELL/readwritefile.hs")
# https://hoogle.haskell.org/
# https://wiki.haskell.org/Hoogle
# https://github.com/ndmitchell/hoogle
# (find-hooglefile "")
# (find-hooglefile "docs/")
# (find-hooglefile "docs/Install.md")
# (find-hooglefile "docs/Install.md" "~/.hoogle/default.hoo")
# (find-hooglefile "docs/Install.md" "hoogle generate --local")
# (find-hooglefile "docs/Install.md" "### Emacs Integration")
# (find-hooglegrep "grep --color=auto -niRH --null -e emacs *")

(require 'haskell-mode)
(define-key haskell-mode-map "\C-ch" 'haskell-hoogle)
;(setq haskell-hoogle-command "hoogle")

<lambdabot> https://hoogle.haskell.org
<ski> @where hayoo
<lambdabot> http://hayoo.fh-wedel.de/ -- See also Hoogle:
            http://haskell.org/hoogle http://fpcomplete.com/hoogle

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-hooglefile "docs/Install.md" "hoogle generate --local")

cabal update
cabal install hoogle
hoogle generate --local
# (find-sh "hoogle --help")

# (find-fline "~/.hoogle/")




#####
#
# Defining a command ":hoogle" in ~/.ghci
# 2022oct08
#
#####

# «:def-hoogle»  (to ".:def-hoogle")
# (to ":def")
# (find-hooglefile "docs/Install.md" "### GHCi Integration")
# (find-angg ".ghci")

-- From: (find-es "haskell" ":def-hoogle")
-- See:  (find-es "haskell" ":def")
:def hoogle \x -> return $ ":!hoogle --count=2000 " ++ x

# (find-sh "hoogle map")
# (find-sh "hoogle map --count=2000")
# (find-sh "hoogle '(a -> b) -> [a] -> [b]' --count=2000")
# (find-hoogle "'(a -> b) -> [a] -> [b]'")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:hoogle map




#####
#
# hayoo
# 2022sep20
#
#####

# «hayoo»  (to ".hayoo")
# (find-fline "~/LOGS/2022sep18.haskell" "@where hayoo")
# (find-cabal-links "Hayoo")


# (find-cabal-links "managed")
# (code-c-d "managed" "~/usrc/managed-1.0.9/")
# (find-managedfile "")




#####
#
# InstanceSigns
# 2022sep25
#
#####

# «InstanceSigns»  (to ".InstanceSigns")
# (find-ghcugdoc  "glasgow_exts#options-language")
# (find-ghcugdoc  "glasgow_exts#extension-InstanceSigs")
# (find-ghcugdocr "glasgow_exts#extension-InstanceSigs")
# (find-ghcugdocr "glasgow_exts#extension-InstanceSigs" ".. _instance-sigs:")

<lambdabot> ski said 12h 20m 22s ago: if you add a pragma line `{-#
            LANGUAGE InstanceSigs #-}' enabling that language
            extension, then you can write your method type
            signatures like `fmap :: (a -> b) -> (ST a ->
<lambdabot> ST b)' in your `instance' declarations without
            commenting them out. (for the infix operator `<*>'
            case, you will have to wrap the operator in brackets
            like `(<*>) :: ST (a -> b) -> (ST a -> ST b)')
<lambdabot> ski said 12h 15m 13s ago: it's also possible to use
            `fmap g (S st) = S (\s -> let .. = st s in ..)',
            matching on `S', rather than using `app', also for
            `(<*>)', and partially for `(>>=)' (unless you
<lambdabot> also use a `let' (or `case') also for the `f' call --
            but that might lose (?) the tail-call, which can be
            important)


#####
#
# template-haskell
# 2022sep26
#
#####

# «template-haskell»  (to ".template-haskell")
# (find-ghcugdoc "glasgow_exts#extension-TemplateHaskell")
# (find-ghcugdoc "8.10.1-notes#template-haskell")

https://wiki.haskell.org/Quasiquotation
https://stackoverflow.com/questions/70812567/quasiquotes-escaping
https://wiki.haskell.org/Template_Haskell
https://wiki.haskell.org/A_practical_Template_Haskell_Tutorial
https://en.wikipedia.org/wiki/Template_Haskell
https://www.stackage.org/package/template-haskell
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/meta-haskell.pdf



#####
#
# no-instance-for
# 2022oct01
#
#####

# «no-instance-for»  (to ".no-instance-for")
# https://mgsloan.com/posts/inspecting-haskell-instance-resolution/
# https://stackoverflow.com/questions/53622428/a-basic-monoid-definition-gives-no-instance-for-semigroup-mymonoid-arising-fr
# https://itecnote.com/tecnote/haskell-defining-a-new-monad-in-haskell-raises-no-instance-for-applicative/
# https://itecnote.com/tecnote/r-good-examples-of-not-a-functor-functor-applicative-monad/
# https://ericlippert.com/category/monads/
# https://ericlippert.com/2013/04/03/monads-part-thirteen/
# https://ericlippert.com/2013/04/02/monads-part-twelve/
# https://ericlippert.com/2013/03/28/monads-part-eleven/
# https://ericlippert.com/2013/03/25/monads-part-ten/
# https://ericlippert.com/2013/03/21/monads-part-nine/
# https://ericlippert.com/2013/03/18/monads-part-eight/
# https://ericlippert.com/2013/03/14/monads-part-seven/
# https://ericlippert.com/2013/03/11/monads-part-six/
# https://ericlippert.com/2013/03/07/monads-part-five/
# https://ericlippert.com/2013/02/28/monads-part-three/
# https://ericlippert.com/2013/02/25/monads-part-two/
# https://ericlippert.com/2013/02/21/monads-part-one/
# (find-fline "~/LOGS/2022oct01.haskell" "many programs backformed it")
# (find-fline "~/LOGS/2022oct01.haskell" "dictionary for that type")



#####
#
# Graph Reduction and STG
# 2022oct01
#
#####

$ «stg»  (to ".stg")
# «graph-reduction»  (to ".graph-reduction")
# https://en.wikipedia.org/wiki/Graph_reduction
# (find-fline "~/LOGS/2022oct01.haskell" "graph reduction")

https://stackoverflow.com/questions/11921683/understanding-stg
https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/GeneratedCode
https://wiki.haskell.org/Ministg
https://hackage.haskell.org/package/stgi
https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/generated-code

http://www.youtube.com/watch?v=UPy7TXgrK1A Screencast: The Haskell heap and the infinite list of primes



#####
#
# rewrite-rules
# 2022oct01
#
#####

# «rewrite-rules»  (to ".rewrite-rules")
# https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/rewrite_rules.html
# (find-ghcugdoc "glasgow_exts#pragma-RULES")
# (find-ghcugdocw "exts/rewrite_rules#rewrite-rules")
# (find-fline "~/LOGS/2022oct01.haskell" "rewrite rules")



#####
#
# ReadS
# 2022oct09
#
#####

# «ReadS»  (to ".ReadS")
# (find-fline "~/LOGS/2022oct09.haskell" "<ski> edrx : either `ReadS'")
# (find-ghc-links "ReadS")
# (find-ghcbasegrep "grep --color=auto -nRHw --null -e ReadS *")
# (find-ghcbasefile "Text/ParserCombinators/ReadPrec.hs")
# (find-ghcbasefile "Text/ParserCombinators/ReadP.hs")
# (find-ghcbasefile "GHC/Read.hs" "'ReadS' is mentioned")
# (find-ghcbasefile "Text/ParserCombinators/ReadP.hs" "type ReadS a")




#####
#
# prettier
# 2024feb24
#
#####

# «prettier»  (to ".prettier")
# https://mrmr.io/til/prettier
# https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf




#####
#
# enumFromTo
# 2024may18
#
#####

# «enumFromTo»  (to ".enumFromTo")
# (find-ghcbasefile "GHC/Enum.hs")
# (find-ghcbasefile "GHC/Enum.hs" "translation of @[n,n'..m]@")
# (find-ghcfile "libraries/base/GHC/Enum.hs")
# (find-ghcfile "libraries/base/GHC/Enum.hs" "translation of @[n,n'..m]@")
# (find-fline "~/LOGS/2024may18.haskell" "<mauke> > enumFromTo 2 5")
# (find-es "emacs" "fsbot")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
enumFromTo 2 5
enumFromThenTo 20 30 50
[2..5]
[20,30..50]





#####
#
# lambdabot
# 2024may18
#
#####

# «lambdabot»  (to ".lambdabot")
# (find-fline "~/LOGS/2024may18.haskell" "<mauke> @undo")

* (eepitch-to-buffer "#haskell@irc.libera.chat")
/query lambdabot
**
**
* (eepitch-to-buffer "lambdabot@irc.libera.chat")
@undo do a <- [0,1]; b <- [a+1,a+2]; guard (a+b < 4); return (a,b)
@. pl undo do a <- [0,1]; b <- [a+1,a+2]; guard (a+b < 4); return (a,b)




#####
#
# explicit-foralls
# 2024jun24
#
#####

# «explicit-foralls»  (to ".explicit-foralls")
# (find-fline "~/LOGS/2024jun24.haskell")

* (eepitch-ghci)
* (eepitch-kill)
* (eepitch-ghci)
:t \ (a,b) -> a
:t pure
:set -fprint-explicit-foralls
:t \ (a,b) -> a
:t \ (a,b) -> a == a
:t pure





https://www.haskellforall.com/2022/05/introductory-resources-to-type-theory.html?m=1
https://www.andres-loeh.de/LambdaPi/LambdaPi.pdf A tutorial implementation of a dependently typed LC
https://web.cecs.pdx.edu/~mpj/thih/thih.pdf Typing Haskell in Haskell
https://www.microsoft.com/en-us/research/wp-content/uploads/1997/01/henk.pdf Henk: a typed intermediate language

<ski> "On Understanding Types, Data Abstraction, and Polymorphism"
      by Luca Cardelli,Peter Wegner in 1985-12 at
      <http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf> ;
      "On Understanding Data Abstraction, Revisited" by William R.
      Cook in 2009-10 at
      <https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf>

;; <cardelliwegner>
;; http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf
;; (find-fline "$S/http/lucacardelli.name/Papers/")
(code-pdf-page "cardelliwegner" "$S/http/lucacardelli.name/Papers/OnUnderstanding.A4.pdf")
(code-pdf-text "cardelliwegner" "$S/http/lucacardelli.name/Papers/OnUnderstanding.A4.pdf")
;; (find-cardelliwegnerpage)
;; (find-cardelliwegnertext)

;; <cookudar>
;; https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf
;; (find-fline "$S/https/www.cs.utexas.edu/~wcook/Drafts/2009/")
(code-pdf-page "cookudar" "$S/https/www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf")
(code-pdf-text "cookudar" "$S/https/www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf")
;; (find-cookudarpage)
;; (find-cookudartext)

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/08/desugaring-haskell-haskell16.pdf

;; <desugarhask>
;; https://www.microsoft.com/en-us/research/wp-content/uploads/2016/08/desugaring-haskell-haskell16.pdf
;; (find-fline "$S/https/www.microsoft.com/en-us/research/wp-content/uploads/2016/08/")
(code-pdf-page "desugarhask" "$S/https/www.microsoft.com/en-us/research/wp-content/uploads/2016/08/desugaring-haskell-haskell16.pdf")
(code-pdf-text "desugarhask" "$S/https/www.microsoft.com/en-us/research/wp-content/uploads/2016/08/desugaring-haskell-haskell16.pdf")
;; (find-desugarhaskpage)
;; (find-desugarhasktext)




http://angg.twu.net/LATEX/2022-1-C2-infs-e-sups.pdf#page=7

Michael I. Schwartzbach: "Polymorphic Type Inference" (1995)
https://cs.au.dk/~amoeller/mis/typeinf.pdf
https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.1493




# (find-sh "locate -i prelude")
# (find-sh "locate -i prelude | grep -i ghc")

# (find-sh "w ghci")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
w ghci

# (find-status   "ghc")
# (find-vldifile "ghc.list")
# (find-udfile   "ghc/")

# (find-status   "ghc-doc")
# (find-vldifile "ghc-doc.list")
# (find-udfile   "ghc-doc/")




file:///usr/share/doc/ghc-doc/html/libraries/base-4.11.1.0/Prelude.html






http://www.cs.chalmers.se/~rjmh/citations/my_most_influential_papers.htm
http://www.cs.chalmers.se/~rjmh/afp-arrows.pdf
http://www.cs.chalmers.se/~rjmh/Papers/pretty.ps
http://www.cs.chalmers.se/~rjmh/Papers/arrows.pdf

http://homepages.inf.ed.ac.uk/wadler/topics/language-design.html


# Category Theory and Haskell:
# http://www.alpheccar.org/en/posts/show/74
# http://www.alpheccar.org/en/posts/show/76
# http://www.alpheccar.org/en/posts/show/77
# http://syntax.wikidot.com/blog:1
# http://www.cs.gunma-u.ac.jp/~hamana/Papers/cpo.pdf

http://www.comlab.ox.ac.uk/people/chris.heunen/publications/2008/arrows/arrows.pdf
http://www.comlab.ox.ac.uk/people/chris.heunen/publications/2006/arrows/arrows.pdf

http://www.khjk.org/log/2010/jul/getflag.html

http://www.haskell.org/haskell-symposium
http://www.loveshack.ukfsn.org/emacs/haskell-latex.el

http://blog.kfish.org/
http://blog.kfish.org/2010/05/monday-music-birk-by-kobi.html

http://goto.ucsd.edu/~rjhala/liquid/haskell/blog/blog/2013/01/01/refinement-types-101.lhs/

https://bartoszmilewski.com/2014/09/22/parametricity-money-for-nothing-and-theorems-for-free/ ***

http://newartisans.com/2017/05/monads-are-monoids/
https://medium.com/@krystal.maughan/breaking-the-space-time-barrier-with-haskell-time-traveling-and-debugging-in-codeworld-a-google-e87894dd43d7

http://www.philipzucker.com/a-sketch-of-gimped-interval-propagation-with-lenses/
https://github.com/philzook58/ad-lens/blob/master/src/Numeric/ADLens/Interval.hs

https://haskell.foundation/
https://mitchellwrosen.github.io/haskell-papers/

https://jrsinclair.com/articles/2019/what-i-wish-someone-had-explained-about-functional-programming/

http://euterpea.com/
http://learnyouahaskell.com/

https://hackage.haskell.org/package/network-3.1.1.1/docs/Network-Socket.html

https://typeclasses.com/phrasebook

<energizer> i am reading this post
            https://alessandrovermeulen.me/2013/07/13/the-difference-between-shallow-and-deep-embedding/

https://www.haskellforall.com/2022/05/introductory-resources-to-type-theory.html ***
https://hackage.haskell.org/package/containers-0.6.5.1/docs/src/Data.Map.Internal.html#line-4252 foldr = foldr

https://github.com/tomsmeding/ad-dualrev-th
# (find-git-links "https://github.com/tomsmeding/ad-dualrev-th" "addualrevth")
# (code-c-d "addualrevth" "~/usrc/ad-dualrev-th/")
# (find-addualrevthfile "")

https://github.com/VMatthijs/CHAD
# (find-git-links "https://github.com/VMatthijs/CHAD" "CHAD")
# (code-c-d "CHAD" "~/usrc/CHAD/")
# (find-CHADfile "")

https://wiki.haskell.org/IRC_channel @pl FUNCTION - shows a pointfree version of FUNCTION
https://wiki.haskell.org/Pointfree

http://learnyouahaskell.com/input-and-output pipes

https://wiki.haskell.org/Introduction_to_IO
https://www.vex.net/~trebla/haskell/IO.xhtml

<Axman6> _73:
         https://wiki.haskell.org/Regular_expressions_for_XML_Schema
<Axman6> I recently used this to implement regexes in our app, and
         it worked really well - it's such a beautiful
         implementation IMO

<ski> @type uncurry curry
<lambdabot> ((a, b) -> c, a) -> b -> c
<c_wraith> that function looks like a prank gone wrong
<ski> @type uncurry3 curry
<lambdabot> ((a, b) -> t4, a, b) -> t4
<ski> heh :)

<lambdabot> ski said 2d 2h 39m 55s ago: hm, i think i would either
            look into one of the `ListT' alternatives (including
            `LogicT') (possibly also using `MonadComprehensions'),
            see if i could insert `IO' or `
<lambdabot> StateT' or `WriterT' into that for the plotting; or try
            to go for `ContT' directly .. or else separate the plot
            stuff, doing it to the result of this comprehension
<lambdabot> ski said 2d 2h 38m 48s ago: well, the various streaming
            packages could possibly also be worthwhile to take a
            look at
<lambdabot> ski said 2d 2h 35m 42s ago: unrelated. you asked about
            `={...}=' notation for justifying equality reasoning
            steps earlier. i got that particular notation from
            (short paper, six pages) "Equality
<lambdabot> proofs in Cayenne" by augustss in 1999 at
            <https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9415>

(find-books "__comp/__comp.el" "augustsson" "={ DEF }=")

https://news.ycombinator.com/item?id=33877510 Exercises for understanding Haskell Lenses (2019) (williamyaoh.com)
https://news.ycombinator.com/item?id=34904888 Squeezing a Sokoban game into 10 lines of Haskell (cole-k.com)
https://www.cole-k.com/2023/02/21/tiny-games-hs/
https://github.com/haskell-game/tiny-games-hs
https://github.com/haskell-game/tiny-games-hs/blob/main/prelude/call-by-push-block

From delimited continuations to algebraic effects in Haskell:
https://blog.poisson.chat/posts/2023-01-02-del-cont-examples.html

http://blog.sigfpe.com/2008/12/mother-of-all-monads.html
https://well-typed.com/blog/2016/09/sharing-conduit/
https://news.ycombinator.com/item?id=35195348 The friendship between Haskell and C (typeclasses.substack.com)

https://lists.gnu.org/archive/html/emacs-devel/2023-04/msg00272.html ->
https://wiki.haskell.org/Parallelism_vs._Concurrency
https://news.ycombinator.com/item?id=35535404 Pedagogical Downsides of Haskell (ciobaca.substack.com)
https://news.ycombinator.com/item?id=35801293 Haskell in Production: Standard Chartered (serokell.io)
https://news.ycombinator.com/item?id=36123651 Purely Functional Data Structures (1996) [pdf] (cmu.edu)
https://serokell.io/blog/ghc-dependent-types-in-haskell
https://hasufell.github.io/posts/2024-05-07-ultimate-string-guide.html
https://learnxinyminutes.com/docs/haskell/
https://www.reddit.com/r/haskell/comments/nfyvy/instance_monad_ziplist_where/
https://stackoverflow.com/questions/37627513/why-ziplist-is-not-the-default-applicative-instance-for-list
https://www.gtf.io/musings/why-haskell
https://news.ycombinator.com/item?id=41518600 Why Haskell? (gtf.io)




#  Local Variables:
#  coding:               utf-8-unix
#  End: