Apache-2.0 licensed by Domen Kožar
Maintained by domen@enlambda.com

Module documentation for 0.1.1

MixPanel client for Haskell

Build Status Hackage

Implements major features of MixPanel HTTP API:

  • [x] track
  • [x] alias
  • [x] engage
  • [ ] import
  • [ ] export

Getting started

import Data.Aeson      ( (.=) )
import Data.Time.Clock ( getCurrentTime )
import GHC.Exts        ( fromList )
import MixPanel        ( Operation(Set), engage, track, alias
                       , AuthToken(..), mkEnv
                       -- reexports
                       , newManager, tlsManagerSettings)


main :: IO ()
main = do
  -- setup
  manager <- newManager tlsManagerSettings
  let env = mkEnv (AuthToken "foobar") manager

  -- track a simple event
  Right () <- track env "Played Video" mempty

  -- track an event with extra properties
  Right () <- track env "Played Video Unique per user"
    $ fromList [ "distinct_id" .= ("generated-id" :: String)
               , "customProperty" .= True ]

  -- alias the user
  Right () <- alias env "generated-id" "user@example.com"

  -- profile engagement
  now <- getCurrentTime
  Right () <- engage env "user@example.com"
    $ Set (fromList [ "$created" .= now])

  putStrLn "All good!"

Design questions

a) Why does it use Object/Array intemediate values from Data.Aeson?

TODO

  • batch requests
  • expose extra url query paramerers
  • engage special properties more type safe?
  • filter out null values in requests to mixpanel
  • api support for tracking revenue

Changes

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

[Unreleased]

[0.1.1] - 2018-11-28

Changes

  • ditch hpack @domenkozar
  • add Show instance for MixpanelError

[0.1.0.0] - 2018-08-25

  • Intial release @domenkozar
comments powered byDisqus