Haskell online IDE & code editor for technical interviews

Running GHC 9.1 – IntelliSense is not available

Experience the Haskell IDE yourself

See just how easy and intuitive CoderPad Interview is to use below.

Launch the environment

Guidelines to use Haskell in this online IDE

Your code is run with runghc solution.hs. Your code runs in interpreted mode, so you don’t need a special entrypoint.

We have a couple testing options available. Simple tests using Hspec are straightforward:

import Test.Hspec
import Test.QuickCheck
import Control.Exception (evaluate)

main :: IO ()
main = hspec $ do
  describe "Prelude.head" $ do
    it "returns the first element of a list" $ do
      head [23 ..] `shouldBe` (23 :: Int)

    it "returns the first element of an *arbitrary* list" $
      property $ \x xs -> head (x:xs) == (x :: Int)

    it "throws an exception if used with an empty list" $ do
      evaluate (head []) `shouldThrow` anyException
Code language: Haskell (haskell)

You can also use QuickCheck’s more powerful test generation framework directly (this test fails):

import Test.QuickCheck

prop_revapp :: [Int] -> [Int] -> Bool
prop_revapp xs ys = reverse (xs++ys) == reverse xs ++ reverse ys

main = quickCheck prop_revapp
Code language: Haskell (haskell)

We install a variety of packages in the Haskell environment (including req for HTTP requests). The output of cabal list --installed --simple is below:

Cabal 2.4.0.1
HUnit 1.6.0.0
QuickCheck 2.13.1
RSA 2.3.1
SHA 1.6.4.4
aeson 1.4.3.0
ansi-terminal 0.9.1
array 0.5.3.0
asn1-encoding 0.9.5
asn1-parse 0.9.4
asn1-types 0.3.2
async 2.2.1
attoparsec 0.13.2.2
attoparsec-iso8601 1.0.1.0
authenticate-oauth 1.6
base 4.12.0.0
base-compat 0.10.5
base-orphans 0.8.1
base64-bytestring 1.0.0.2
basement 0.0.10
binary 0.8.6.0
blaze-builder 0.4.1.0
bytestring 0.10.8.2
cabal-doctest 1.0.6
call-stack 0.1.0
case-insensitive 1.2.1.0
cereal 0.5.8.0
clock 0.8
colour 2.3.5
connection 0.3.0
containers 0.6.0.1
cookie 0.4.4
crypto-api 0.13.3
crypto-pubkey-types 0.4.3
cryptonite 0.25
data-default 0.7.1.1
data-default-class 0.1.2.0
data-default-instances-containers 0.0.1
data-default-instances-dlist 0.0.1
data-default-instances-old-locale 0.0.1
deepseq 1.4.4.0
directory 1.3.3.0
dlist 0.8.0.6
entropy 0.4.1.4
exceptions 0.10.2
filepath 1.4.2.1
ghc 8.6.5
ghc-boot 8.6.5
ghc-boot-th 8.6.5
ghc-compact 0.1.0.0
ghc-heap 8.6.5
ghc-prim 0.5.3
ghci 8.6.5
hashable 1.2.7.0
hashtables 1.2.3.1
haskeline 0.7.4.3
hourglass 0.2.12
hpc 0.6.0.3

hspec 2.7.1
hspec-core 2.7.1
hspec-discover 2.7.1
hspec-expectations 0.8.2
http-api-data 0.4
http-client 0.6.4
http-client-tls 0.3.5.3
http-types 0.12.3
integer-gmp 1.0.2.0
integer-logarithms 1.0.3
libiserv 8.6.3
memory 0.14.18
mime-types 0.1.0.9
monad-control 1.0.2.3
mtl 2.2.2
network 3.1.0.0
network-uri 2.6.1.0
old-locale 1.0.0.7
parsec 3.1.13.0
pem 0.2.4
pretty 1.1.3.6
primitive 0.6.4.0
process 1.6.5.0
quickcheck-io 0.2.0
random 1.1
req 2.0.1
retry 0.8.0.1
rts 1.0
scientific 0.3.6.2
setenv 0.1.1.3
socks 0.6.0
split 0.2.3.3
splitmix 0.0.2
stm 2.5.0.0
streaming-commons 0.2.1.0
tagged 0.8.6
template-haskell 2.14.0.0
terminfo 0.4.1.2
text 1.2.3.1
tf-random 0.5
th-abstraction 0.3.1.0
time 1.8.0.2
time-locale-compat 0.1.1.5
tls 1.4.1
transformers 0.5.6.2
transformers-base 0.4.5.2
transformers-compat 0.6.5
unix 2.7.2.2
unordered-containers 0.2.10.0
uuid-types 1.0.3
vector 0.12.0.3
vector-algorithms 0.8.0.1
x509 1.7.5
x509-store 1.6.7
x509-system 1.6.6
x509-validation 1.6.11
xhtml 3000.2.2.1
zlib 0.6.2

Need a better way to interview candidates? Give CoderPad a try.