Re: Is it possible to type a function to accept only literal values?

Henning Thielemann <[email protected]>
Newsgroups gmane.comp.lang.haskell.cafe
Message-ID <[email protected]>
On Tue, 27 Feb 2024, Daneel Yaitskov wrote:

> Recently I was experimenting with a GCC intrinsic functions for x86
> SMID instructions to write a fast CSV parser and noticed that some
> arguments are required to be literal values (known at compile time),
> which makes live hard, e.g. bit shift operation expects number of bits
> to shift in such a way.
> Nonetheless the intel manual defines function prototypes as normal:
>
>   __m128i _mm_bsrli_si128 (__m128i a, int imm8)
>
> Using a variable as second argument in _mm_bsrli_si128 produces
> unclear, but  compilation error with exact line number.
> Definitely some magic happens here, because it is not possible to
> express this constraint type system of C language.
>
> Haskell is known as one of the best languages in type acrobatics, but
> could it beat C here?

I'd use a type parameter instead of a value parameter. E.g.

bsrli :: M128I -> Proxy i -> M128I

using your favourite type-level natural number representation 'i'.

But actually, I would prevent doing vectorisation by hand and instead try 
to assist GCC to do the vectorization itself. This would work on all GCC 
supported target processors, not just one.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.