News aggregator

Obfuscated haskell attempt

Haskell on Reddit - Fri, 04/03/2015 - 12:06am
type A = Integer data B = B { u :: !B, j :: B, r :: !A, i :: [A] } | Y c=head k=tail b x y=x(y)y n=map(snd)h m=2:3:5:[7] f=s(flip(a))t s x y z=x(y(z)) e=filter(v)[2..221] z=s(s(s((s)b)(s(s)flip)))s main=mapM_(print)(m++map(fst)h) v=s(flip(all)m)(s((.)(/=0))mod) t=(s(s(s(b))flip)((s)s))(s(B(Y)Y)c)k g=z(:)(z(,)c(b(s((s)map(*))c)))(s(g)k) h=c(q):c(k(q)):d(p(t((c)n))(k(n)))(k((k)q)) q=g(scanl1(+)(11:cycle(zipWith(-)((k)e)e))) a x Y = x a Y x = x a x y = case compare((r)x)(r(y)) of GT -> a(y)x _ -> B(a((j)x)y)(u(x))((r)x)(i(x)) p x y = case compare((r)x)(c(c(y))) of GT -> p(f((c)y)x)(k(y)) _ -> r(x):p(f((i)x)(a(u(x))(j(x))))y d x y = case compare((c)x)(fst(c(y))) of GT -> c(y):(d)x((k)y) LT -> d(k(x))y EQ -> d((k)x)(k(y)) submitted by bwj_pdx
[link] [10 comments]
Categories: Incoming News

Haskell-programming sysadmin opportunity at SFLC

haskell-cafe - Thu, 04/02/2015 - 8:38pm
The Software Freedom Law Center is seeking a motivated systems administrator for our small office, where we use only free and open source software. The Systems Administrator will be responsible for three main areas of work: systems maintenance, user support, and systems development. Our existing systems are a collection of Debian servers that provide central services to the office. In addition to Debian, we use: - Apache - Asterisk - Ceph - deets - dirvish and BoxBackup - Ganeti with Xen and KVM - Gitolite - Hakyll - hledger and hledger-web - Ikiwiki - Monkeysphere - Nginx - OpenLDAP - OpenVPN - Postfix/SpamAssassin/Dovecot - Radicale - Yesod as well as a number of other systems. Ideal candidates will have experience with most of these components and the ability to quickly master the ones they know less about. As our new Systems Administrator, you will be responsible for maintaining and rebuilding our servers as necessary so some knowledge of server components and hardwar
Categories: Offsite Discussion

What is {-# ... #-} in the beginning of most haskell programs?

Haskell on Reddit - Thu, 04/02/2015 - 8:33pm

I am new to Haskell (and programming in general). I have seen many haskell programs that begin with {-# LANGUAGE (something here) #-}. What is this? What does it accomplish? Is it Haskell's version of shebang?

submitted by srivkrani
[link] [55 comments]
Categories: Incoming News

Type and function naming conventions

Haskell on Reddit - Thu, 04/02/2015 - 7:44pm

A substantial program has many names. What conventions do you use to name them? I'm asking about function names and type names that are exported from a module, including data constructors.

I see many random StackOverflow questions on this topic and scattered other blog posts and such, but most of these are about object-oriented languages. Does anyone have good conventions for a functional language?

Also, what suggestions exist for how heavily to rely on the module system to disambiguate names, and how much to use typeclasses purely for naming purposes? I tried the one data type per module style, but I did not find it to be clearly superior and the fact that it breaks too many tools and conventions (makes default Haddocks worthless) led me to abandon that idea.

Sometimes I have to name something so nebulous that I resort to random short, but memorable words. When I saw a package with Biff, Tannen, Joker, and Clown as names, I knew I am not alone in this problem.

I used to routinely name fields using record syntax, but this results in an explosion of mostly useless names so now I tend to avoid records for small types whose data constructors are exported.

what I'm not talking about:

  • short vs long variable names for local bindings that aren't exported from a module

  • whether things like Monoid should not be given allegedly scary-sounding names

  • whether type variables should have long names or use a single letter

submitted by massysett
[link] [10 comments]
Categories: Incoming News

Curry arguments on a structure of functions, then fold with composition

Haskell on Reddit - Thu, 04/02/2015 - 5:59pm

Motivation/Pattern

3 == (+) 1 2 -- Apply (+) to 1, and then to 2. 2 == pure (*) <-> 1 <-> 2 -- Apply (*) to 1, and then to 2. [3,2] == [(+),(*)] <-> 1 <-> 2 -- Apply each of [(+), (*)] to 1, and then to 2. 21 == (compose $ [(+),(*)] <-> 3) 4 -- Apply each of [(+), (*)] to 3, compose, and then apply to 4.

Definition

infixl 4 <-> (<->) :: (Functor f) => f (a -> b) -> a -> f b fab <-> a = fmap ($ a) fab -- More readable definition for Applicative: -- (<->) :: Applicative f => f (a -> b) -> a -> f b -- fs <-> e = fs <*> pure e -- Applicative interchange law: -- fs <*> pure e = (\f -> f e) <$> fs = fmap ($ e) fs -- ======================================= compose :: Foldable f => f (c -> c) -> c -> c compose = foldr (flip (.)) id -- WARNING: this reverses the order: -- or: compose' = appEndo . foldMap Endo -- thanks, sccrstud92.

Some more toy examples

f :: Int -> Int -> Int f env = compose $ fs <-> env where fs = [const (+3), (*), const (+ (-8))] :: [Int -> Int -> Int] g :: (a -> a) -> (a -> a) -> [a] -> [a] g e1 e2 = compose $ fs <-> e1 <-> e2 where fs = [const map, const . map] :: [(a -> b) -> (a -> b) -> [a] -> [b]] -- f1 10 2 = 42 -- g (+1) (*2) [1..10] = [3,5,7,9,11,13,15,17,19,21]

It seems to me that <-> is applying functions to arguments in a way that is "perpendicular" to function composition.

Operator Label

Apparently, then Lens library contains a function ?? that is defined identically (thanks, zxamt, for pointing this out). In the use-case that I described above, I think that labeling the operator as ?? conveys very little information about what it does. In contrast, something like <-> is more readable because it looks like a function being applied to arguments.

Discussion

Any comments on this pattern/style?

UPDATE: Bifunctors!

It is easy to generalize the operator to Bifunctors (or indeed multi-functors):

(<-->) :: (Bifunctor f) => f (a -> b) (a -> c) -> a -> f b c fab <--> a = bimap ($a) ($a) fab

Example:

split :: Integral a => a -> a -> (a,a) unsplit :: Integral a => a -> (a,a) -> a split k i = (div, mod) <--> i <--> k unsplit k (d, m) = k * d + m -- (split, unsplit) <--> k :: Integral a => (a -> (a,a), (a,a) -> a) composeTuple :: (b -> c, a -> b) -> a -> c composeTuple (f,g) = f . g -- For all k: composeTuple $ (split, unsplit) <--> k = id -- For all k: composeTuple $ (unsplit, split) <--> k = id

UPDATE

Apparently, this is an operation that works on any "representable functor". There is a whole post on it in Comonad.Reader. From the article:

distributeReader :: Functor f => f (r -> a) -> (r -> f a) distributeReader fra = \r -> fmap ($r) fra

As you can see, distributeReader is the same as <->. The article is the third in a series on applicatives. There is also a memoization library based on this idea.

submitted by newestHaskeller
[link] [8 comments]
Categories: Incoming News

wren gayle romano: An introduction to recursive types

Planet Haskell - Thu, 04/02/2015 - 3:37pm

The past couple weeks I've been teaching about recursive types and their encodings in B522. Here's a short annotated bibliography for followup reading:

  • For a basic intro to recursive types, and for the set-theoretic metatheory: see section IV, chapters 20 and 21.
    • Benjamin C. Pierce (2002) Types and Programming Languages. MIT Press.
  • The proof of logical inconsistency and non-termination is "well-known". For every type τ we can define a fixed-point combinator and use that to exhibit an inhabitant of the type:
    • fixτ = λf:(τ→τ). let e = λx:(μα.α→τ). f (x (unroll x)) in e (roll(μα.α→τ) e)
    • ⊥τ = fixτ (λx:τ. x)
  • A category-theoretic proof that having fixed-points causes inconsistency
  • The proof of Turing-completeness is "well-known". Here's a translation from the untyped λ-calculus to STLC with fixed-points:
    • (x)* = x
    • (λx. e)* = roll(μα.α→α) (λx:(μα.α→α). e*)
    • (f e)* = unroll (f*) (e*)
  • Knaster–Tarski (1955): For any monotone function, f, (a) the least fixed-point of f is the intersection of all f-closed sets, and (b) the greatest fixed-point of f is the union of all f-consistent sets.
  • For a quick introduction to category theory, a good place to start is:
    • Benjamin C. Pierce (1991) Basic Category Theory for Computer Scientists. MIT Press.
  • For a more thorough introduction to category theory, consider:
  • The Boehm–Berarducci encoding
  • Church/Boehm–Berarducci encodings are not canonical
    • [citation needed]
  • Surjective pairing cannot be encoded in STLC (i.e., the implicational fragment of intuitionistic propositional logic): see p.155
    • Morten H. Sørensen and Paweł Urzyczyn (2006) Lectures on the Curry–Howard isomorphism. Studies in Logic and the Foundations of Mathematics, v.149.
  • However, adding it is a conservative extension
  • Compiling data types with Scott encodings
  • For more on the difference between Scott and Mogensten–Scott encodings:
  • Parigot encodings
    • M. Parigot (1988) Programming with proofs: A second-order type theory. ESOP, LNCS 300, pp.145–159. Springer.
  • For more on catamorphisms, anamorphisms, paramorphisms, and apomorphisms
  • build/foldr list fusion
    • Andy Gill, John Launchbury, and Simon Peyton Jones (1993) A short cut to deforestation. In Proc. Functional Programming Languages and Computer Architecture, pp.223–232.
    • Many more links at the bottom of this page
  • For another general introduction along the lines of what we covered in class
  • "Iterators" vs "recursors" in Heyting arithmetic and Gödel's System T: see ch.10:
    • Morten H. Sørensen and Paweł Urzyczyn (2006) Lectures on the Curry–Howard isomorphism Studies in Logic and the Foundations of Mathematics, v.149.
  • There are a great many more papers by Tarmo Uustalu, Varmo Vene, Ralf Hinze, and Jeremy Gibbons on all this stuff; just google for it.
Twitter Facebook Google+ Tumblr WordPress

comments
Categories: Offsite Blogs

Toby Goodwin: Hiatus

Planet Haskell - Thu, 04/02/2015 - 2:33pm
Hiatus

I've decided to take a break from flare / MPv6 during the month of April, and work on my other projects. No doubt I have more ideas than I'll have time for, but here's a quick brainstorm of things I could do:

  • tweak the design of this website a bit
  • consider moving to hakyll
  • rc: get it into fedora
  • rc: new release fixing known problems
  • pacc / rc integration
  • pacc: get it into debian, fedora
  • rc and pacc: arch, nixos??
  • pacc: develop left recursion ideas
  • pacc: replace make with shake?

Looking at the above, I think my plan will be as follows.

  1. Fix some rc problems; make new release.
  2. Do some more work on rc-pacc.
  3. See if I can make any headway on left recursion.
  4. Look at getting things into distros.

Conveniently, there are 4 weeks in the month, so that's one week on each item. Oh, but I should get the wheels turning on becoming a Fedora contributor straight away. There's plenty to work through!

Categories: Offsite Blogs

Chalmers is advertising positions, deadline April 6

General haskell list - Thu, 04/02/2015 - 1:16pm
Dear all, Chalmers University of Technology has 2-3 open positions in the division of Software Technology (which consists of functional programming, language based security and formal methods). Please consider applying! And/or forward to people you know who would be interested. Application deadline: April 6, 2015 (soon!). --- Associate Professor in Software Technology http://www.chalmers.se/en/about-chalmers/vacancies/Pages/default.aspx?rmpage=job&rmjob=p2896 Lecturer in Software Technology http://www.chalmers.se/en/about-chalmers/vacancies/Pages/default.aspx?rmpage=job&rmjob=p2899 /Koen
Categories: Incoming News

Announcing: LTS (Long Term Support) Haskell 2

haskell-cafe - Thu, 04/02/2015 - 11:16am
The LTS Haskell 2.0 release is officially out the door. More details are available at: https://www.fpcomplete.com/blog/2015/04/announcing-lts-2 For the tl;dr crowd, run the following inside your project to get a cabal.config with appropriate constraints: wget https://www.stackage.org/lts/cabal.config There are some questions about policy at the end of the post that I'd appreciate feedback on. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe< at >haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Categories: Offsite Discussion

Hindley Milner and Scott Encodings

Haskell on Reddit - Thu, 04/02/2015 - 11:04am

Ive been playing around with Hindley Milner and Scott encodings, I'd love to know what you all think, especially those who know more about (sub)types than I.

https://gist.github.com/stelleg/9d0182ac16dc54370e36

Thanks!

submitted by stelleg
[link] [11 comments]
Categories: Incoming News

FARM 2015: 2nd Call For Papers

General haskell list - Thu, 04/02/2015 - 10:28am
Dear all, The workshop on Functional Art, Music, Modelling and Design, co-located with ICFP 2015 in Vancouver, may be of interest to some of you. The 2nd call for papers is enclosed; deadline 17 May. Any help spreading the CFP to colleagues and friends who might be interested would be much appreciated. Thanks! /Henrik
Categories: Incoming News

Is `race (readChan a) (readChan b)` safe?

Haskell on Reddit - Thu, 04/02/2015 - 7:50am

Or what about race (threadDelay n) (readChan a)?

Golang has that select thing for selecting from multiple chans, but I'd guess that it's been checked for correctness.

race, however, looks like it could make one of the actions in a half-assed state. What do y'all make of this?

submitted by hxr
[link] [5 comments]
Categories: Incoming News