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?
Scrap Your Boilerplate in f#
1.2k Views Asked by Richard Warburton At
1
There are 1 best solutions below
Related Questions in F#
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
- If I find myself defining a Component class and a ComponentInstance class, am I doing something wrong?
- How to get a class's attributes and map them to .csv headers in a generic way?
- Scala: Multiple type parameters for implicit class
- redefinition of default argument for class<template-parameter-1-2>
- what does int cannot be dereferenced mean here
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
- Discriminated union member methods
- how to unwrap union value in list in f#
- Way to segment discriminated union into types with and without property
- Why can't I simplify this iteration through a list of members of a discriminated union?
- Match on 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
- Deriving functor instance, not on last type argument
- Deriving Typeable for Text.PrettyPrint.Doc
- Is it possible to use SYB to transform the type?
- Relationship between TypeRep and "Type" GADT
- Understanding the type signature of gfoldl from Data.Data.Data
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 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?
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.