Guest User

Untitled

a guest
Nov 22nd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.72 KB | None | 0 0
  1. #! /usr/bin/env nix-shell
  2. #! nix-shell -i runghc -p "haskellPackages.ghcWithPackages(p: with p; [type-level-sets])"
  3. #! nix-shell -I nixpkgs=channel:nixos-18.03
  4.  
  5.  
  6. {-# LANGUAGE PolyKinds #-}
  7. {-# LANGUAGE TypeOperators #-}
  8. {-# LANGUAGE MultiParamTypeClasses #-}
  9. {-# LANGUAGE DataKinds #-}
  10. {-# LANGUAGE FlexibleInstances #-}
  11. {-# LANGUAGE GADTs #-}
  12. {-# LANGUAGE TypeApplications #-}
  13.  
  14. module Main where
  15.  
  16. import Data.Type.Set (Set(..), Proxy(..))
  17.  
  18. class Get a s where
  19. get :: Set s -> a
  20.  
  21. instance {-# OVERLAPS #-} Get a (a ': s) where
  22. get (Ext a _) = a
  23.  
  24. instance {-# OVERLAPPABLE #-} Get a s => Get a (b ': s) where
  25. get (Ext _ xs) = get xs
  26.  
  27. main :: IO ()
  28. main = do
  29. let lst = Ext "hello" $ Ext 10 $ Empty
  30. putStrLn $ show $ get @String lst
Add Comment
Please, Sign In to add comment