Синтаксис Haskell для case-выражения в действительно блокируется

typedef typename Tail::inUnion dummy;

Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.

template  struct Contains;

template 
struct Contains >
{
    enum { result = Contains::result };
};

template 
struct Contains >
{
    enum { result = true };
};

template 
struct Contains
{
    enum { result = false };
};

PS: Посмотрите на Boost :: Variant

PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design

23
задан Adam Stelmaszczyk 11 June 2017 в 14:14
поделиться

2 ответа

возврат является (перегруженной) функцией, и он не ожидает, что ее первым аргументом будет ключевое слово. Можно или заключить в скобки:

module Main where 
import System(getArgs)

main = do   
     putStrLn "This is a test"
     s <- foo
     putStrLn s  

foo = do
    args <- getArgs 
    return (case args of
                [] -> "No Args"
                [s]-> "Some Args")

или использование удобный оператор приложения ($):

foo = do
    args <- getArgs 
    return $ case args of
                [] -> "No Args"
                [s]-> "Some Args"

Stylewise, я выломал бы его в другую функцию:

foo = do
    args <- getArgs 
    return (has_args args)

has_args [] = "No Args"
has_args _  = "Some Args"

, но все еще необходимо заключить в скобки или использовать ($), потому что возврат берет один аргумент, и функциональное приложение является наивысшим приоритетом.

29
ответ дан wnoise 29 November 2019 в 02:04
поделиться

Эквивалентно:

foo = do
  args <- getArgs 
  case args of
        [] -> return "No Args"
        [s]-> return "Some Args"

Вероятно, предпочтительнее делать то, что предлагает wnoise, но это может помочь кому-то понять немного лучше.

11
ответ дан Peter Burns 29 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: