Haskell'de, type
ve newtype
türleri için bir takma ad sağlamanın iki yolu vardır.C# 'nun Haskell'in yeni tipine eşdeğer nedir?
type UserId = Int
hasAccess :: UserId -> Bool
hasAccess id = {-- stuff --}
-- Elsewhere in the program
login :: Int -> Bool
login n = hasAccess n -- Typechecker won't complain
bir newtype
benzer, ama farklı bir türü olarak türü denetleyicisi tarafından kabul edilir: type
orijinal modeli tam olarak aynı şekilde türü denetleyicisi tarafından kabul edilir eşanlamlısı bir tipi eşanlamlı sağlar :
using UserId = Int;
0123: C# '
newtype UserId = UserId Int
hasAccess :: UserId -> Bool
hasAccess (UserId id) = {-- stuff --}
-- Elsewhere in the program
login :: Int -> Bool
login n = hasAccess n -- Typechecker will complain, n isn't a UserId !
, bir üst seviyesi ile using
beyanı tipi eş anlamlılarını tanımlayabilir
Ancak, güçlü yazılan, derleyici tarafından denetlenen bir tür diğer adı varsayılan olarak C# içinde görünmüyor. Bir sınıf sargısını oluşturmak için T4 şablonları ve CodeDOM ile otomatik kod oluşturmayı inceledim, ancak bunları programlama akışımda nasıl temizleyebildiğimi gerçekten bilmiyorum.
İdeal olarak, bir üst düzeyde söyleyebilmek istiyorum:
// Something like this?
using Int.UserId;
/* Elsewhere */
var id = new UserId(5);
public bool HasAccess(UserId id)
{
/* Stuff */
}
Bu derleme zamanında de dişli içine kod üretimi başladı. Bu mümkün değilse veya IntelliSense için bir tavuk ve yumurta sorunu sağlıyorsa, her x dakikada bir (veya bir düğme veya her neyse) çalışan bir otomatik derleme seçeneği iyi olurdu.
Bunu neden yapmak istediğiniz konusunda biraz bilgi verebilir misiniz? –
Kodunuzu neden her x dakikada bir derlemek istersiniz? – Georg
Başka tür adı altında bir tür gizleme kullanımı nedir? – Franck