What is MIME type "text/x-haskell"?

A MIME type is a string that tells browsers and other tools how to handle a particular kind of file.

text/x-haskell marks files that contain source code written in the Haskell language. It tells text editors, compilers, and other tools how to handle and display the code properly.
Developers use it for correct syntax highlighting, parsing, and error checking.

Files using this MIME type include those with the source code extension HS and its literate variant LHS. Other examples are preprocessed ones with HSC and mixed-code files like CHS. It also applies to files from related tools and ecosystems, such as BS (Bluespec BH), GF (Grammatical Framework), CABAL (configuration files), DHALL, HS-BOOT, and even PURS from the PureScript community.

For more technical details on MIME types, visit IANA Media Types.

Associated file extensions

Usage Examples

HTTP Header

When serving content with this MIME type, set the Content-Type header:


    Content-Type: text/x-haskell    
  

HTML

In HTML, you can specify the MIME type in various elements:


    <a href="file.dat" type="text/x-haskell">Download file</a>    
  

Server-side (Node.js)

Setting the Content-Type header in Node.js:


    const http = require('http');    
    
    http.createServer((req, res) => {    
      res.setHeader('Content-Type', 'text/x-haskell');    
      res.end('Content here');    
    }).listen(3000);    
  

Associated file extensions

FAQs

What is the purpose of the text/x-haskell MIME type?

This MIME type identifies files containing source code written in the Haskell programming language. It allows web servers and text editors to distinguish these files from generic text, enabling features like syntax highlighting for extensions like HS and LHS.

How do I configure Apache to serve Haskell files?

You can add the MIME type to your Apache configuration or .htaccess file. Add the line AddType text/x-haskell .hs .lhs .hsc to ensure the server sends the correct headers to browsers and clients.

Will web browsers execute text/x-haskell files?

No, web browsers cannot execute Haskell source code directly. If a user navigates to a file with this MIME type, the browser will usually display it as plain text or prompt the user to download the file.

Is text/x-haskell an official IANA standard?

No, the x- prefix indicates that this is a non-standard or experimental type. While not officially registered with IANA, it is the de facto standard used by the community for identifying Haskell code and related files like CABAL configurations.

What is the difference between .hs and .lhs files using this type?

Standard Haskell source code uses the .hs extension. The .lhs extension stands for "Literate Haskell," where code and documentation are intermingled; the compiler ignores the text and only compiles lines marked as code, but both utilize text/x-haskell.

How do I add support for Haskell files in Nginx?

To serve Haskell files correctly in Nginx, open your mime.types file (usually located in /etc/nginx/). Add the line text/x-haskell hs lhs; inside the types { ... } block and reload the server.

Why are .purs and .dhall files associated with this MIME type?

Files like PURS (PureScript) and DHALL belong to languages heavily inspired by Haskell. Because they share similar syntax and functional programming paradigms, some systems group them under the text/x-haskell label for generic syntax highlighting purposes.

Are there security risks in serving text/x-haskell files?

Yes, serving source code files publicly can expose your application's logic, algorithms, and potentially hard-coded secrets. Ensure that your web server is configured to block access to raw source files like .hs or .cabal unless you intend to share your code as Open Source.

General FAQ

What is a MIME type?

A MIME (Multipurpose Internet Mail Extensions) type is a standard that indicates the nature and format of a document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838.

MIME types are important because they help browsers and servers understand how to process a file. When a browser receives a file from a server, it uses the MIME type to determine how to display or handle the content, whether it's an image to display, a PDF to open in a viewer, or a video to play.

MIME types consist of a type and a subtype, separated by a slash (e.g., text/html, image/jpeg, application/pdf). Some MIME types also include optional parameters.

How do I find the MIME type for a file?

You can check the file extension or use a file identification tool such as file --mime-type on the command line. Many programming languages also provide libraries to detect MIME types.

Why are multiple MIME types listed for one extension?

Different applications and historical conventions may use alternative MIME identifiers for the same kind of file. Showing them all helps ensure compatibility across systems.