I'm working on camlp4 extension for haskell-like do notation in Ocaml, and trying to figure out how GHC compiles recursive do-bindings (enabled with -XDoRec).
I wonder if it possible for monadic fixpoint combinator to exist in strict language (like Ocaml/F#/SML/...)?
If yes, how can it look like? Would it be very useful?
MonadFix in strict language
442 Views Asked by John Rivers At
1
There are 1 best solutions below
Related Questions in HASKELL
- Typeclass projections as inheritance
- How to generate all possible matrices given a number n in Haskell
- Is there a way to get `cabal` to detect changes to non-Haskell source files?
- How to have fixed options using Option.Applicative in haskell?
- How can I create a thread in Haskell that will restart if it gets killed due to any reason?
- Automatic Jacobian matrix in Haskell
- Haskell writing to named pipe unexpectedly fails with `openFile: does not exist (No such device or address)`
- Why does Enum require to implement toEnum and fromEnum, if that's not enough for types larger than Int?
- Non-exhaustive patterns in function compress
- How to get terms names of GADT in Template Haskell?
- Implementing eval() function with Happy parser generator
- How to count the occurences of every element in a list in Haskell fast?
- In Haskell, what does `Con Int` mean?
- Extract a Maybe from a heterogeneous collection
- Haskell, Stack, importing module shows error "Module not found"
Related Questions in F#
Related Questions in OCAML
- Why can't dune recognize ppx_jane?
- Is there a function that returns a list of values with specific type in OCaml?
- How to use menhir to parse into a GADT expression?
- How to generate Menhir .automaton files with dune in OCaml?
- matching multiple patterns at once in ocaml
- What causes this type mismatch when applying a functor?
- What is the right way to put type declarations in OCaml signatures
- Obtain an interpretation of unbounded variables using Z3 in OCaml
- Using infix operator in the module in OCaml
- Do any OCaml compilers take advantage of the unspecified order of evaluation of let ... and bindings?
- Nesting algebraic handlers from separate modules
- Can I define pattern synonyms in OCaml?
- OCaml functions on uncertain data types
- Module unavailable when compiling another file that uses it in OCaml
- Can't understand the syntax in ocaml code
Related Questions in MONADS
- What should i use Exceptions or Monads for handle if service occur a problem?
- Is `Pair` a valid instance of `MonadRec`?
- Collecting errors (instead of short-circuiting) until value is actually being used
- Monad Map with two values in Java Functional Programming
- Turn a List of Iterators into an Iterator of Lists in Scala 3
- Haskell fails to infer the return type of a monad after using the sequence operator
- Codensity and ContT
- Pure functional way of creating a std::optional counterpart
- How do I spawn a shell command from X monad and get it output?
- Read instance for Associative Computations Tree
- Haskell [parse error, possibly incorrect indentation or mismatched brackets) parser
- Implementation of MonadState without using return?
- Is this a bug in Haskell implementation?
- Does a Maybe Monad collapses in Just or Nothing?
- How to use two different monads in the same do-expression?
Related Questions in MONADFIX
- How to implement MonadFix instance of an IO-like type in JS?
- Understanding the sliding law of MonadFix
- Haskell: monadic fixpoint on RWS is looping if traversing on argument
- Why is `mfix` not total in `MaybeT`
- Can a monadic rose tree have a MonadFix instance?
- Duplicate EDSL code generated with RecursiveDo in Haskell
- MonadFix instance for []
- What is the meaning of tilde in lambda expression?
- MonadFix instance for interpreter monad transformer generated by FreeT?
- Is a lazy, breadth-first monadic rose tree unfold possible?
- Why can't there be an instance of MonadFix for the continuation monad?
- Is there an instance of Monad but not of MonadFix?
- typeclass for repetitive actions until fixed point
- MonadFix in strict language
- Is it possible to implement MonadFix for `Free`?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
The F# computation expression syntax (related to Haskell
do) supports recursion:This is supported because the computation builder has to support
Delayoperation in addition to other monadic (or MonadPlus) operations. The code is translated to something like:The type of
Delayis, in general,(unit -> M<'T>) -> M<'T>and the trick is that it wraps a computation with effects (or immediate recursive reference) into a delayed computation that is evaluated on demand.If you want to learn more about how the mechanism works in F#, then the following two papers are relevant:
The first one describes how the F# computation expression syntax is desugared (and how
Delayis inserted - and in general, how F# combines delayed and eager computations with effects) and the second one describes how F# handleslet recdeclarations with values - like theonesvalue above.