Skip to content

Instantly share code, notes, and snippets.

// Current (C# 5) syntax
var request = new CreateIndexRequest("new-index-name")
{
IndexSettings = new IndexSettings
{
Settings = new Dictionary<string, object>
{
{"index.settings", "value"}
},
Mappings = new List<RootObjectMapping>
{-# LANGUAGE
TypeOperators
, TemplateHaskell
#-}
module Tie where
import Prelude hiding ((.), id)
import Control.Category
import Data.Record.Label
{-# LANGUAGE DoRec #-}
module ExprLang where
import Control.Monad.Error
import Data.List
import Data.Maybe
-- Language
@tomlokhorst
tomlokhorst / MonadTest.cs
Created February 23, 2010 21:11
Monad type class ported to C#
// Monad type class ported to C#
// Only tested with: Mono C# compiler version 2.4.2.3
//
// The Monad type class has been split up into two .NET interface:
// - IMonad<A> has functions that can be applied _to_ monads (i.e. bind)
// - IMonadDictionary<A> has functions that _create_ monads (i.e. unit)
//
// Because .NET doesn't support higher kinded generics, we loose a bit of
// type safety. After calling `bind`, the return value has to be casted to
// the proper type.
@tomlokhorst
tomlokhorst / ReadTest.cs
Created February 23, 2010 18:14
Read type class ported to C#
// Read type class ported to C#
// Only tested with: Mono C# compiler version 2.4.2.3
//
// Because there are no static interface members, new instances of the
// Dictionary classes have to be created (although they contain no state).
//
// The functions using the read method (like mulStrings) explicitly mention
// `int` in IReadDictionary<int>, but that's just like `x = read "4" :: Int` in
// Haskell.
//
@tomlokhorst
tomlokhorst / FuctorTest.cs
Created February 22, 2010 13:07
Functor type class ported to C#
// Functor type class ported to C#
// Only tested with: Mono C# compiler version 2.4.2.3
//
// Because .NET doesn't support higher kinded generics, we can't exactly port
// the Functor type class.
// However, if we're willing to give up a bit of type safety, we can get the
// IFuctor interface to work.
//
// We only have to add a single type cast, directly after using fmap. E.g:
// var xs = new List<int>();