From 0fb8217770cb4c617abfa42b996a6920cca17003 Mon Sep 17 00:00:00 2001 From: Sanchayan Maity Date: Sat, 21 Mar 2020 17:53:55 +0530 Subject: [PATCH] Add contravariant notebook Signed-off-by: Sanchayan Maity --- contravariant.ipynb | 58 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 contravariant.ipynb diff --git a/contravariant.ipynb b/contravariant.ipynb new file mode 100644 index 0000000..d47b0a6 --- /dev/null +++ b/contravariant.ipynb @@ -0,0 +1,58 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Contravariant Functors" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "{-# LANGUAGE KindSignatures #-}\n", + "\n", + "-- (.) :: (b -> c) -> (a -> b) -> a -> c\n", + "-- contraComp :: (a -> b) -> (b -> c) -> a -> c\n", + "\n", + "-- (.) f g x = f (g x)\n", + "-- contraComp f g x = g (f x)\n", + "\n", + "-- instance Functor (a ->) where\n", + "-- fmap = (.)\n", + "\n", + "-- instance Contravariant (-> z) where\n", + "-- contramap = flip (.)\n", + "\n", + "newtype Predicate a = Predicate { getPredicate :: a -> Bool }\n", + "\n", + "newtype Op b a = Op { getOp :: a -> b }\n", + " \n", + "class Contravariant (f :: * -> *) where\n", + " contramap :: (a -> b) -> f b -> f a\n", + " \n", + "instance Contravariant (Op a) where\n", + " contramap f g = Op $ let bToa = getOp g in bToa . f" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Haskell", + "language": "haskell", + "name": "haskell" + }, + "language_info": { + "codemirror_mode": "ihaskell", + "file_extension": ".hs", + "name": "haskell", + "pygments_lexer": "Haskell", + "version": "8.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}