I'm trying to learn GHC Generics. After reviewing several examples, I wanted to try to create a generic Functor instances (disregarding that GHC can derive them automatically for me). However, I realized I have no idea how to work with a parametrized data types with Generics, all the examples I've seen were of kind *. Is this possible, and if yes, how? (I'm also interested in other similar frameworks, such as SYB.)
How to construct generic Functor instances using GHC.Generics (or other similar frameworks)?
548 Views Asked by Petr At
2
There are 2 best solutions below
5
Sjoerd Visscher
On
There is a Generic1 class for data types of kind * -> *. Working with it is mostly the same as with data types of kind *, except there's also Par1 for the parameter. I've used it in my unfoldable package for example.
Related Questions in GENERICS
- Implementing Iterator for abstractCollection
- C# check if there is an overload method with the specific type
- instantiating a generic class data type known at runtime
- How to tell Java that two wildcard types are the same?
- C++ Templates with multiple constraints
- How are the generic functions and types stored in an rlib?
- Java Generics missunderstanding
- Generic webAPI method based on parameter types of arrays
- C# pass generic type as a generic type parameter?
- Return int in method supposed to return generic class
- StarUML Class Diagram : How to manually add Generics (Template Type T) for a class
- Modeling an XML hierarchy for traversal with MVVM
- How to get the values of generic array in Java?
- Swift: converting between Arrays of 'Protocol' and Arrays of implementing Class
- instantiating a generic referance class with data types known at runtime
Related Questions in HASKELL
- Cabal sandbox is using a global dependency. Could not resolve
- Haskell lens: let binding of Traversal'
- How can I parse fixed-length, non-delimited integers with attoparsec?
- Pipeline-like operation using TChan
- compile-time vs. run-time cost of Hamlet templates
- Date-time package in haskell - error in the current one, can't find an analog
- How does one debug infinite recursion in Haskell?
- Force GHC using local files
- List with random numbers in Haskell
- Changes in other elements based on listbox selections in threepenny-gui
- Multithreading and gtk2hs
- Operator section for applicative with <$> and <*>
- Unable to create a custom header to use it in "withManager"
- How do I reuse an intermediate value in chain of Haskell Either binds?
- Haskell, Tree problems
Related Questions in GHC
- Force GHC using local files
- GHC complains about overlapping instances when in fact they are not
- What is the procedure for profiling under GHC 7.10.1 and cabal 1.23?
- within a project can I compile a module and interactively load the compiled module within ghci?
- Continuation versus call stack in Haskell
- installing present on ghc-7.10
- Haskell make recipe fails for Paradox theorem prover using GHC
- Text append performance in Haskell
- Which unix compatibility toolchain to use with cabal install on windows?
- cabal update: Local and remote files match
- How to tell if a haskell sourcecode has Bang
- GHC undefined reference to Paths in dependency
- Why does this Haskell program leak space when compiled with optimizations?
- Memory consumption API
- cabal-install and ghc 7.10.1
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
Related Questions in GHC-GENERICS
- Advantages of SYB (scrap your boilerplate) over GHC Generics
- Deriving Generic from data declared in another file fails
- Decode list to generic data with 4 selectors
- generics-sop: lifting a polymorphic action into a product
- How to create a Mk instance for GHC.Generics.U1?
- Understanding how to construct GHC.Generics Rep's and convert back to values
- Using type families and Generics to find an Id value
- How do I create a ListIsomorphic instance for generic vectors?
- How to construct generic Functor instances using GHC.Generics (or other similar frameworks)?
- Constructing a n-ary product with all the values of a simple sum type
- Convert from type `T a` to `T b` without boilerplate
- Deriving functor instance, not on last type argument
- Deriving Typeable for Text.PrettyPrint.Doc
- Record of maps with compositional lookups and updates?
- Deriving projection functions using `generics-sop`
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?
The best place to look for lots of example functions using GHC Generics is the
generic-derivingpackage. There's a generic definition of theFunctorclass in there. Copying (slightly simplified) fromGenerics.Deriving.Functor:To use this on a datatype, you have to derive
Generic1rather thanGeneric. The key difference of theGeneric1representation is that it makes use of thePar1datatype that encodes parameter positions.