I've used the Scrap Your Boilerplate and Uniplate libraries in the Haskell programming language, and I would find that form of generic programming over discriminated unions to be really useful. Is there an equivalent library in the f# programming language?
Related Questions in F#
- how to call function from library in formula with R type provider
- How to express the full range of values of a char in F#?
- F# strange type error message
- Parsing/Typing of as-patterns in F#
- How to launch FsUnit tests on Linux/Mac
- F# - Result is list of list of int instead of a list of int
- Active Pattern Matching with Discriminated Unions
- Why is FSharp.Data.SqlClient record exposed as object?
- Can you list the contents of a namespace or module in F#
- How to use F#'s headOrDefault on an empty array?
Related Questions in GENERIC-PROGRAMMING
- Creating a generic reusable function with implicit and types in Scala
- Why i am getting Segfault in below program for pointer but not for array?
- How to write a pretty-printer for std::list<*> in C++?
- Confused about returns in stack template
- Generic Cuda function - Template & Cuda - c++
- Pass Action<.., .., T > as Parameter without a predefined number of action parameters
- Verilog: Is there a way to make a generalized adder (variable width/number of inputs)?
- Extract Generic Type T from HashMap
- c++ call template constructor to instantiate
- Type safe type combinations with shapeless
Related Questions in DISCRIMINATED-UNION
- F# strange type error message
- Active Pattern Matching with Discriminated Unions
- Fail to convert to json a record with union types with websharper
- Is it possible to automatically extract type from discriminated union?
- F# Discriminated Union - "downcasting" to subtype
- Map from discriminated union to enum
- How do you get the Discriminated Union Type from a Case instance?
- Typescript discriminated union types with Observable.of
- Names bound to both the decomposed discriminated union components AND an original composed value
- F#: downcast a discriminated union
Related Questions in SCRAP-YOUR-BOILERPLATE
- Advantages of SYB (scrap your boilerplate) over GHC Generics
- Boilerplate-free annotation of ASTs in Haskell?
- Generic programming in Haskell with SYB and ad-hoc polymorphism
- Recursive Type Lensing
- A function for returning part of a product or record depending on parameter and requested return type
- Scrap Your Boilerplate in f#
- How to construct generic Functor instances using GHC.Generics (or other similar frameworks)?
- How to fold over a constructor with special cases?
- How to define SYB functions for type extension for tertiary type constructors (ext3)?
- Convert from type `T a` to `T b` without boilerplate
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?
Popular Tags
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)
Not that I know of; without support built-in to the language/compiler, I expect the only alternative is a reflection-based version. (I don't know how Uniplate is implemented - do you?)
Here's the code for a reflection-based version based on the example from the original presentation. I have not thought deeply about its limitations, but this was much simpler to write than I would have guessed.
The
everywherefunction traverses the entire structure of an arbitrary DU and applies the functionfto each node that is the type thatfworks on, leaving all other nodes as-is.