Haskellで型レベルプログラミングで遊ぶ
Haskellで型レベルプログラミング
型のみの計算をする ref
code:pre.hs
>> :set -XFlexibleContexts
>> :type undefined :: HasDefault Bool => Bool
FlexibleContextsをsetしたあとに、undefiendに対して目的の型注釈をする
Haskellにおける型レベルプログラミングの基本(翻訳) - Qiita
原文
超良記事mrsekut.icon
キーワード
型コンストラクタ
高階多相型
DataKinds
GADTs
Type Family
code:hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
data Nat = Zero | Succ Nat
data Vector (n :: Nat) (a :: *) where
VNil ::Vector 'Zero a
VCons ::a-> Vector n a -> Vector ('Succ n) a
instance Show a => Show (Vector n a) where
show VNil = "VNil"
show (VCons a as) = "VCons " ++ show a ++ " (" ++ show as ++ ")"
type family Add x y where
Add 'Zero n = n
Add ('Succ n) m = 'Succ (Add n m)
append :: Vector n a -> Vector m a -> Vector (Add n m) a
append VNil xs = xs
append (VCons a rest) xs = VCons a (append rest xs)
Haskellの種(kind)について (Part 1) - Haskell-jp
Haskellの種(kind)について (Part 2) - Haskell-jp
kindに関するもろもろの紹介
#WIP
https://blog.jle.im/entry/practical-dependent-types-in-haskell-1.html
依存型で型依存Neural Networkを作る
https://qiita.com/autotaker1984/items/f5cc8914e051563a86f9
https://qiita.com/aiya000/items/881d5f7e04b1178e7764
Servant
https://github.com/paf31/purescript-quickserve