내가 GADT의를 사용하여 하스켈 텐서 미적분학의 유형 안전 구현을 만들고 싶어 의 형태 보증 텐서 유형을 만드는, 그래서 규칙은 다음과 같습니다과 텐서이다 N-dimentional metrices (예 : ) - indecies가없는 Tensor (스칼라) 인 은 '위층'색인이 하나 인 Tensor이고 은 '위층'과 ' 아래층 'indecies 동일한 유
형식 수준 프로그래밍을 수행하는 데 DataKinds를 사용하려고하지만 이러한 구조 중 하나가 다른 형식으로 중첩되어있을 때 어려움에 처해 있습니다. {-# LANGUAGE DataKinds, TypeFamilies, GADTs, MultiParamTypeClasses, FlexibleInstances #-}
module Temp where
data
DataKinds을 사용할 때 ghci가 다형성 반환 값 유형을 지정하려고 할 때 흥미로운 오류를 표시합니다. 다음 코드가 있습니다 : {-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE Standa
과 같은 재귀 적 GADT를 처리하는 방법 이것은 내가 해왔 던 Haskell 유형 시스템 확장에 가장 가깝다고 생각하며 내가 할 수 없었던 오류가 발생했습니다 알아낼. 길이에 대해 미리 사과드립니다. 제가 만들 수있는 가장 짧은 예입니다. 문제는 내가 아직도 가지고있는 문제를 보여줍니다. GADT 정의 {-# LANGUAGE StandaloneDerivi
f 종류는 무엇입니까? class C f where
comp :: f b c -> f a b -> f a c
내가 쓴 : (* -> *) -> * -> * 이 맞습니까? c은 콘크리트 유형 *입니다. a은 유형을 취해 유형을 생성하는 유형입니다. 그리고 이것들은 모두 f의 매개 변수입니까? 나의 논증이 맞습니까? 종류는 T입니다. data T
DataKinds 확장자는 '값'(즉, 생성자)을 유형으로 승격합니다. 예를 들어 True 및 False은 Bool 종류의 고유 한 유형이됩니다. 내가 원하는 것은 그 반대로, 즉 유형을 값으로 내릴 수 있습니다. 이 서명 함수는 괜찮을 것 :이 demote :: Proxy (a :: t) -> t
가 실제로 Bool에 대한 예를 들어,이 작업을 수행
문자열의 길이가 N 자 미만임을 보장하는 유형을 만들려고합니다. src/Simple/Reporting/Metro2/TextMax.hs:18:50: error:
• Couldn't match kind ‘*’ with ‘Nat’
When matching the kind of ‘Proxy’
• In the first argument of ‘natVa
메시지 대기열 용 lib를 작성하고 있습니다. 대기열은 Direct 또는 Topic이 될 수 있습니다. Direct 대기열에는 정적 바인딩 키가 있고 Topic 대기열에는 동적 대기열이있을 수 있습니다. Direct 대기열에서만 작동하는 publish 함수를 작성하고 싶습니다. 이 작품이 두 개의 별도의 생성자 directQueue :: Name -> Di
저는 하스켈에 비교적 새로 왔으며, HList의 정의 중 하나를 이해하려고합니다. 내가보고있어 '[] 및 (x ': xs) 구문은 무엇인가 data instance HList '[] = HNil
newtype instance HList (x ': xs) = HCons1 (x, HList xs)
pattern HCons x xs = HCons1 (x, x