I have come across an interesting problem that I thought might be a pertinent place for Template Haskell. I'm working on a web front-end to a database using yesod and yesod-persistant. I am generating my database types using mkPerist function and the persistLowerCase quasi-quoter.
My problem is, I need a way to edit fields of the database but writing the hamlet code for six different pages for each of the columns seems incredibly repetitive. I figured I could use Template Haskell to automatically generating the text fields and checkboxes for editing that column of the database given the type. Ideally I would just pass the name of the type to the Template Haskell function and then TH would take care of generating all of the Hamlet for the page. My question is, can I use Template Haskell in this case? Is it the best solution? Particularly, can Template Haskell generate code for other quasi-quoters? Particularly Hamlet? Here is a link to my project as of now: https://github.com/ProspectRidgeTech/PRADatabase Thanks in advance! (PS. Let me know if there is a better way to approach this problem and if you have any suggested edits to my question.)
Can I Use Template Haskell to Generate Hamlet Code?
107 Views Asked by Brooks At
1
There are 1 best solutions below
Related Questions in DATABASE
- How to add the dynamic new rows from my registration form in my database?
- How to store a date/time in sqlite (or something similar to a date)
- Problem with add new attribute in table with BOTO3 on python
- When an E-R attribute should be perceived as a relationship attribute or as an entity set attribute?
- SQLAlchemy: efficient relationship loading in 3-way many-to-many relationship
- Cannot connect to Postgres Database when running Quarkus Tests with Gitlab ci
- Local or remote database with react-native?
- I want to edit a specific row in database
- How to enter data in mongodb array at specific position such that if there is only 2 data in array and I want to insert at 5, then rest data is null
- Open Web Library
- database login.py and register.py error showing 404 file not found and doesn't work
- SQL71561: SqlComputedColumn: When column selected
- Liquibase as SaaS To Configure Multiple Database as Dynamic
- Updated max input vars but table still shows error
- Spring does not map set of roles
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 YESOD
- How to make a language toggle in Yesod?
- Yesod fails to run on docker
- Upload a file to temporary folder with a Yesod application: encoding issue
- Haskell - Yesod - print route with placeholder
- Configure/disable request logging in yesod
- serve static files in Yesod
- Cross-Compile Yesod app for aarch64 system on x86_64
- Yesod scaffold returns error "The application isn’t built"
- Yesod Esqueleto: could not load module; member of hidden package ‘esqueleto-3.5.8.1’
- How to get inetd and warp to work together
- Haskell Yesod: Sending a Post Request On Image Click
- YesodAuth Google OAuth2 timing out
- How to encode VALUES constant table expression in esqueleto?
- Can't build a simple Yesod project using stack, getting an error with language-javascript-0.7.1.0 package
- Does yesod-bin compile under GHC 9.2.4?
Related Questions in TEMPLATE-HASKELL
- Is there a way to get `cabal` to detect changes to non-Haskell source files?
- How to get terms names of GADT in Template Haskell?
- TemplateHaskell's addDependentFile doesn't work when the file doesn't exist
- Printing an expression using Dump library fails
- How can I pinpoint the specific location where property tests fail when using QuickCheck more efficiently?
- Can I attach Haddock comments to declarations in a `[d|…|]` declaration quote?
- How to refer to a module (and construct the names of its contents) in template haskell
- How do I capture the named value created by this TH code
- Implement a ReaderT monad Type for mocking network api calls
- How do I get all instances of HasField type class?
- Obfuscating values of compile-time parameters in Haskell
- No Store instance for Aeson object
- How to force Stack to re-compile when a text file read using template haskell changes?
- No instance for (Data.Vector.Generic.Base.Vector ...) when using Hasql.TH
- (Template?) Haskell get name of function at run or compile time
Related Questions in HAMLET
- Hamlet route for OptionalSubsite
- Load different JS library files for different components
- Hamlet html not registering <head> or <title> tags correctly for my home route handler
- How to append key / value pair to url generated in a hamlet block in yesod
- Yesod Hamlet breaks HTML by replacing single quotes with double quotes
- Compact if-then-else in Hamlet templates
- How to get related fields (foreign key) in Yesod?
- How to use hamlet template with route parameter?
- Haskell Yesod problems
- Problems with Haskell/Hamlet
- Route Interpolation fails with type error in Yesod Handler
- How can I add class_ to preEscapedToHtml in Haskell Blaze or Hamlet?
- Always `$newline never` in Yesod
- Can I Use Template Haskell to Generate Hamlet Code?
- Text.Hamlet.Runtime - nesting HamletData?
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?
To answer your question : Yes you can, however I wouldn't recommend it. A quasi quoter is just a function which take a string and generate some code, so you when you see
You could replace it with (or equivalent)
So nothing stops you in TH to generate a string an call hamlet to it. However, one of the point of TH is type safety. Generating a string to then parse kind of defeat the object of it. Also, this 2 steps code generation will probably be hard to debug.
Anyway, if your problem is to generate table for Persistent entities, I don't think you need TH at all and just use Persistent fields information. I had a similar problem and writen some code which generate an Html table for a list of entities. It shouldn't be hard to modify it do input.
Writing the code to process the form and update the database might be more tricky and need TH, however there is no Hamlet involved in this step.