haskell

Info on type family instances

Intro: While checking out snoyman's "persistent" library I found myself wanting ghci's (or another tool) assistance in figuring out stuff. ghci's :info doesn't seem to work as nicely with type-families and data-families as it does with "plain" types: > :info Maybe data Maybe a = Nothing | Just a -- Defined in Data.Maybe ... > :inf...

Zipping with padding in Haskell

A couple of times I've found myself wanting a zip in Haskell that adds padding to the shorter list instead of truncating the longer one. This is easy enough to write. (Monoid works for me here, but you could also just pass in the elements that you want to use for padding.) zipPad :: (Monoid a, Monoid b) => [a] -> [b] -> [(a, b)] zipPad ...

Parsing Indentation-based syntaxes in Haskell's Parsec

I'm trying to parse an indentation-based language (think Python, Haskell itself, Boo, YAML) in Haskell using Parsec. I've seen the IndentParser library, and it looks like it's the perfect match, but what I can't figure out is how to make my TokenParser into an indentation parser. Here's the code I have so far: import qualified Text.Pars...

How can I compile a GUI executable with ghc?

I ported a little Haskell program I wrote from Mac to Windows. It's a GUI application (wxHaskell, compiled with ghc 6.12.1), so it does not need the command prompt window to open. It does so, anyway, so my question: What must I do so that the program starts without opening a prompt window first? Is there some ghc switch for this? ...

Body Mass Index program in haskell

Hi there. I'm trying to write a simple program in Haskell that can determine someone's body mass index. Here's what I have written: type Height = Float type Weight = Float type PeopleStats = [(String, Height, Weight)] and... bmi :: Height -> Weight -> Float bmi heightCm weightKg = weightKg/(heightCm)^2 healthy :: Height -> Weight ...

wxHaskell on OS X

I want to use wxHaskell on OS X (Snow Leopard, MacBook Pro). I was able to install the library successfully and the script below: module Main where import Graphics.UI.WX main :: IO () main = start hello hello :: IO () hello = do f <- frame [text := "Hello!"] quit <- button f [text := "Quit", on command := close f] ...

Haskell function composition (.) and function application ($) idioms: correct use.

I have been reading Real World Haskell and I am nearing the end but a matter of style has been niggling at me to do with the (.) and ($) operators. When you write a function that is a composition of other functions you write it like: f = g . h But when you apply something to the end of those functions I write it like this: k = a $ b...

Haskell maps returning a monad

The lookup function in Data.Map and Data.IntMap currently return values wrapped in Maybe with the type signature lookup :: Ord k => k -> Map k a -> Maybe a It used to have the more general type of lookup :: (Monad m, Ord k) => k -> Map k a -> m a I realize the former likely reduces the need of extra type specification, but ...

stm monad problem

This is just a hypothetical scenario to illustrate my question. Suppose that there are two threads and one TVar shared between them. In one thread there is an atomically block that reads the TVar and takes 10s to complete. In another thread is an atomically block that modifies the TVar every second. Will the first atomically block ev...

Learning Haskell maps, folds, loops and recursion

I've only just dipped my toe in the world of Haskell as part of my journey of programming enlightenment (moving on from, procedural to OOP to concurrent to now functional). I've been trying an online Haskell Evaluator. However I'm now stuck on a problem: Create a simple function that gives the total sum of an array of numbers. In a ...

Haskell Weird Kinds

When I was experimenting with Haskell kinds, and trying to get the kind of ->, and this showed up: $ ghci ... Prelude> :k (->) (->) :: ?? -> ? -> * Prelude> Instead of the expected * -> * -> *. What are the ?? and ? things? Do they mean concrete types or "kind variables"? Or something else? ...

Curious about the HashTable problem

I read that hash tables in Haskell had performance issues (on the Haskell-Cafe in 2006 and Flying Frog Consultancy's blog in 2009), and since I like Haskell it worried me. That was a year ago, what is the status now (June 2010)? Has the "hash table problem" been fixed in GHC? ...

Haskell: writing the result of a computation to file

I have a function which creates a tuple after computation, but I would like to write it to file. I know how to write to a file using writeFile, but do not know how to combine the computation and monads IO together in the type signature. This is my code. invest :: ([Char]->Int->Int->([Char], Int) ) -> [Char]->Int->Int->([Char], Int)...

mapping list of different types implementing same function?

I want to apply a function to every element in a list (map) but the elements may have different types but all implement the same function (here "putOut") like an interface. However I cannot create a list of this "interface" type (here "Outputable"). How do I map a list of different types implementing the same function? import Control.M...

What are uses of polymorphic kinds?

Polymorphic kinds are an extension to Haskell's type system, supported by UHC, allowing data A x y = A (y x) to be typed (kinded?) as a -> (a -> *) -> *. What are they useful for? ...

What's the status of multicore programming in Haskell?

What's the status of multicore programming in Haskell? What projects, tools, and libraries are available now? What experience reports have there been? ...

Haskell Qualified Imports (Creating an Empty Set)

I am attempting to pass back a Node type from this function, but I get the error that empty is out of scope: import Data.Set (Set) import qualified Data.Set as Set data Node = Vertex String (Set Node) deriving Show toNode :: String -> Node toNode x = Vertex x empty What am I doing wrong? ...

Haskell Ord instance with a Set

I have some code that I would like to use to append an edge to a Node data structure: import Data.Set (Set) import qualified Data.Set as Set data Node = Vertex String (Set Node) deriving Show addEdge :: Node -> Node -> Node addEdge (Vertex name neighbors) destination | Set.null neighbors = Vertex name (Set.singleton destina...

Defining your own Ord for a data type (Haskell)

I am attempting to make some data structures to solve a graph puzzle. I am trying to define an edge's comparison criteria, but I am not sure how. So far: data Edge = Edge (Set String) Bool How do I tell let the compiler know that I want edges to be declared equal if they have identical sets of strings, and not have equality have anyth...

Haskell Input Return Tuple

Hello to all, i wonder can a IO() function return tuple because i would like to get these out of this function as input for another function. investinput :: IO()->([Char], Int) investinput = do putStrLn "Enter Username : " username <- getLine putStrLn "Enter Invest Amount : " tempamount <- getLine let amount = show tempamount r...